vijos P1083 小白逛公園

2021-07-04 23:37:43 字數 1610 閱讀 1232

小新經常陪小白去公園玩,也就是所謂的遛狗啦…在小新家附近有一條「公園路」,路的一邊從南到北依次排著n個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。

一開始,小白就根據公園的風景給每個公園打了分-.-。小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a個和第b個公園之間(包括a、b兩個公園)選擇連續的一些公園玩。小白當然希望選出的公園的分數總和盡量高咯。同時,由於一些公園的景觀會有所改變,所以,小白的打分也可能會有一些變化。

那麼,就請你來幫小白選擇公園吧。

第一行,兩個整數n和m,分別表示表示公園的數量和操作(遛狗或者改變打分)總數。

接下來n行,每行乙個整數,依次給出小白 開始時對公園的打分。

接下來m行,每行三個整數。第乙個整數k,1或2。k=1表示,小新要帶小白出去玩,接下來的兩個整數a和b給出了選擇公園的範圍(1≤a,b≤n, a可以大於b!);k=2表示,小白改變了對某個公園的打分,接下來的兩個整數p和s,表示小白對第p個公園的打分變成了s(1≤p≤n)。

其中,1≤n≤500 000,1≤m≤100 000,所有打分都是絕對值不超過1000的整數。

小白每出去玩一次,都對應輸出一行,只包含乙個整數,表示小白可以選出的公園得分和的最大值。

5 3

1 2 -3 4 5

1 2 3

2 2 -1

1 2 3

2

-1

和山海經神似,只是加了乙個單點修改。
#include

#include

#include

#define n 500010

#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

#define ls rt<<1

#define rs rt<<1|1

using

namespace

std;

struct node

;node f[n<<2];

int sum[n<<2];

int n,m;

void pushup(node &a,node &b,node &s,int rt)

void build(int l,int r,int rt)

int mid=(l+r)>>1;

build(lson);

build(rson);

pushup(f[ls],f[rs],f[rt],rt);

}void fix(int u,int c,int l,int r,int rt)

int mid=(l+r)>>1;

if(mid>=u)

fix(u,c,lson);

else

fix(u,c,rson);

pushup(f[ls],f[rs],f[rt],rt);

}node query(int l,int r,int l,int r,int rt)

int main()

else

fix(y,z,1,n,1);

}return

0;}

VIJOS P1083 小白逛公園

洛谷傳送門 jdoj傳送門 小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著n個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。一開始,小白就根據公園的風景給每個公園打了分。小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a個和...

vijos P1083 小白逛公園

演算法 線段樹 題解 學自 的回答 回溯時維護一段區間的以下域 以上域在葉子節點中的值,都等於節點代表公園的評分 設當前節點為 x,左孩子為 l,右孩子為 r。則 x.suml max l.suml,l.sum r.suml x.sumr max r.sumr,r.sum l.sumr x.sum ...

Vijos1083 小白逛公園

description 小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著n 個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。一開始,小白就根據公園的風景給每個公園打了分 小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a個和第...