描述【題目分析】小新經常陪小白去公園玩,也就是所謂的遛狗啦…在小新家附近有一條「公園路」,路的一邊從南到北依次排著n個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。
一開始,小白就根據公園的風景給每個公園打了分-.-。小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a個和第b個公園之間(包括a、b兩個公園)選擇連續的一些公園玩。小白當然希望選出的公園的分數總和盡量高咯。同時,由於一些公園的景觀會有所改變,所以,小白的打分也可能會有一些變化。
那麼,就請你來幫小白選擇公園吧。
同spoj gss1。再加入修改操作就可以了。但是資料太坑,有可能兩個座標大小不按照順序,如果不交換,就會掛。
【**】
#include
#include
#include
#include
#include
using namespace std;
#define f(i,j,k) for (int i=j;i<=k;++i)
using namespace std;
struct nodet[4001000];
int data[500010];
int n,q;
void build(int l,int r,int num)
build(l,(l+r)/2,num*2);
build((l+r)/2+1,r,num*2+1);
t[num].sum=t[num*2].sum+t[num*2+1].sum;
t[num].lans=max(t[num*2].lans,t[num*2].sum+t[num*2+1].lans);
t[num].rans=max(t[num*2+1].rans,t[num*2+1].sum+t[num*2].rans);
t[num].max=max(t[num*2].rans+t[num*2+1].lans,max(t[num*2].max,t[num*2+1].max));
}node find(int l,int r,int num)
else
if (mid>=r)
nowl=find(l,r,num*2);
nowr=find(l,r,num*2+1);
now.sum=nowl.sum+nowr.sum;
now.lans=max(nowl.lans,nowl.sum+nowr.lans);
now.rans=max(nowr.rans,nowr.sum+nowl.rans);
now.max=max(nowl.rans+nowr.lans,max(nowl.max,nowr.max));
return now;
}inline void cha(int num,int k,int to)
if (!(t[num].l<=k&&t[num].r>=k)) return;
cha(num*2,k,to),cha(num*2+1,k,to);
t[num].sum=t[num*2].sum+t[num*2+1].sum;
t[num].lans=max(t[num*2].lans,t[num*2].sum+t[num*2+1].lans);
t[num].rans=max(t[num*2+1].rans,t[num*2+1].sum+t[num*2].rans);
t[num].max=max(t[num*2].rans+t[num*2+1].lans,max(t[num*2].max,t[num*2+1].max));
}int main()
}
TYVJ 1427 小白逛公園 線段樹
自從上一次線段樹寫掛了以後,心裡一直不爽!線段樹都能寫掛。於是我又找了一些題。因為臨近noip了,就找了點簡單題,難的沒寫出來,除錯要花好久。我一旦做的題目錯了,就會一直找錯,直到3 4天都沒發現才會放棄,浪費好多時間,於是不敢找難的 這個題目是動態求區間最大連續和,算是一道基本線段樹吧 只要記錄從...
Tyvj P1427 小白逛公園
描述 小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著n個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。一開始,小白就根據公園的風景給每個公園打了分 小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a個和第b個公園之間 包括a...
小白逛公園
描述 小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著n個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。一開始,小白就根據公園的風景給每個公園打了分 小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a個和第b個公園之間 包括a...