uoj164 清華集訓2015 V 線段樹

2022-05-07 22:48:21 字數 1079 閱讀 4575

傳送門

\[\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 要查詢單點值的話只要把所...