思路: 很基礎的區間合併,開四個陣列:
num: 區間數字的和
lsum:從左端點起最大連續欄位和
rsum:從右端點起最大連續欄位和
sum:區間最大連續欄位和
然後按照以前合併的思路合併下就完事了。
好久沒寫區間合併的題。。還被卡了一陣子,屬實弟弟
實現**;
#includeusingnamespace
std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define ls rt<<1
#define rs rt<<1|1
const
int m = 1e6+10
;struct
nodet[m
<<2
];void pushup(int
rt)void update(int p,int c,int l,int r,int
rt)
int mid = (l + r) >> 1
;
if(p <=mid) update(p,c,lson);
else
update(p,c,rson);
pushup(rt);
}node query(
int l,int r,int l,int r,int
rt)
int mid = (l + r) >> 1
;
if(r <= mid) return
query(l,r,lson);
else
if(l > mid) return
query(l,r,rson);
else
}int
main()
else
}return0;
}
P4513 小白逛公園
小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著n nn個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。一開始,小白就根據公園的風景給每個公園打了分 小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a aa個和第b bb個公園...
P4513 小白逛公園 線段樹
線段樹是一門比較刁鑽的手藝.此題我們需要維護 4 個變數 amx 代表當前節點的最大值.lmx 代表當前節點以左端點為起點的區間最大值.rmx 代表當前節點以右端點為結尾的區間最大值.sum 代表整段的和.然後我們在 push up 的時候,也是要做蠻多工作.lc 為左端點,rc 為右端點.lmx ...
P4513 小白逛公園 線段樹
小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著nn個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。一開始,小白就根據公園的風景給每個公園打了分 小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第aa個和第bb個公園之間 包括a...