傳送門
\[\begin
x &=\max(\max(x+a,b)+a',b')\\
& =\max(\max(x+a+a',b+a'),b')\\
& =\max(x+a+a',\max(b+a',b'))\\
\end\]
這裡假設\(a,b\)是原來的標記,\(a',b'\)是新加上的標記。
考慮如何求歷史的最大值,對於乙個點的最大值\(\max(x+a,b)\),要麼在左邊取到,要麼在右邊取到,我們只需要記錄左邊的最大值和右邊的最大值即可,即記錄\(ma=\max a,mb=\max b\)。
同時\(ma,mb\)也是需要合併的,具體的式子自己推導一下就好了。
#include#define rep(i,a,b) for(int i=a,i##_end_=b;i<=i##_end_;++i)
#define drep(i,a,b) for(int i=a,i##_end_=b;i>=i##_end_;--i)
#define debug(x) cout<<#x<<"="templatevoid chkmax(t &_,t __)
const int maxn=5e5+10;
const ll inf=1e18;
int n,m;
ll w[maxn];
struct seg
void reset()
}c[maxn<<2];
struct segment_tree;
else build(lson),build(rson);
} void update(int o,int l,int r,int l,int r,seg x)
} ll query(int o,int l,int r,int p,int ty)
else
}}t;
int main());
if(ty==2)t.update(1,1,n,l,r,(seg));
if(ty==3)t.update(1,1,n,l,r,(seg));
} else
} return 0;
}
uoj164 清華集訓2015 V
題目鏈結 164.清華集訓2015 v 大佬的部落格 jefflyy 這個東西,詭異的標記下傳。一共有五種操作,區間加法,區間減法 減到0就不減了 區間覆蓋,單點詢問,單點歷史最大值。非常巧妙的使用了乙個pair來進行標記。y max x a,b 就是可以看做建立乙個直角座標系,其中x軸表示原數字,...
UOJ 164 清華集訓2015V
qwqzcysky真是菜死了,這是我剛上高一的時候坤爺在夏令營講的,可是今天才切掉 想想也神奇,乙個2016.11才學會線段樹的菜雞,夏令營的時候居然聽過segment tree beats?所以我們來看下這個神奇的segment tree beats.我們維護乙個神奇的標記二元組 x,y 在樹點上...
UOJ 164 清華集訓2015 V
這道題由於是單點詢問,所以異常好寫。注意到每種修改操作都可以用乙個標記 a,b 表示。標記 a,b 的意義就是 x max 同時這種標記也是支援合併的。有 a,b c,d a c,max 用上這種標記的話,1 操作就是 x,0 2 操作就是 x,0 3 操作就是 inf,x 要查詢單點值的話只要把所...