BZOJ 1251 序列終結者

2022-04-30 03:15:09 字數 1158 閱讀 8118

【題意】給定含有n個0的的數列。

1.區間加值

2.區間翻轉

3.區間求最大值

【演算法】平衡樹(fhq-treap)

需要特別注意的是:

1.使0點對全域性無影響並全程保持(例如求max,t[0].mx=-inf)

2.平衡樹和線段樹的上傳區別在於要考慮本身這個點。

#include#include

#include

using

namespace

std;

const

int maxn=100010

;struct treet[maxn*2

];int

st[maxn];

intn,m,root;

void down(int

k)

if(t[k].add)

}int max(int a,int b)

void up(int k)

void dfs(int

k)void

build();

while(top&&t[st[top]].rnd>t[i].rnd)

t[st[top]].r=i;

st[++top]=i;

}dfs(st[

1]);

t[0].r=0

; t[

0].mx=-0x3f3f3f3f;//

make 0 no influence

root=st[1];}

int merge(int a,int

b)

else

}void split(int k,int &l,int &r,int

x)

else

up(k);

}void plus(int l,int r,int

x)void turn(int l,int

r)int ask(int l,int

r)int

main()

else

if(k==2

)turn(l,r);

else printf("

%d\n

",ask(l,r));

}return0;

}

view code

bzoj 1251 序列終結者

題目在這裡 這應該是splay裸題了吧。對於每個節點儲存5個值,size,max,flag,lazy,val 分別表示這個節點的子樹大小,子樹的最大值,子樹是否有打過翻轉標記,子樹的增加的值,前面的所有都包括這個節點它自己 以及這個節點的當前值。對於一段區間 l,r 的詢問 修改,只需把l 1這個節...

bzoj1251 序列終結者

time limit 20 sec memory limit 162 mb submit 2971 solved 1188 submit status discuss 網上有許多題,就是給定乙個序列,要你支援幾種操作 a b c d。一看另一道題,又是乙個序列 要支援幾種操作 d c b a。尤其是...

BZOJ 1251 序列終結者

網上有許多題,就是給定乙個序列,要你支援幾種操作 a b c d。一看另一道題,又是乙個序列,要支援幾種操作 d c b a。尤其是我們這裡的某人,出模擬試題,居然還出了一道這樣的,真是沒技術含量 這樣,我也出一道題,我出這一道的目的是為了讓大家以後做這種題目有乙個 庫 可以依靠,沒有什麼其他的意思...