P2572 SCOI2010 序列操作

2022-04-06 02:49:33 字數 1069 閱讀 3603

#include#include#define n 100005

using namespace std;

int n,m;

struct seg

t[n<<2];//共13個成員

void rev(int k)//第k個點取反 ,在外層修改了取反標誌

void color(int k,int v)//第k個點全改成0(1)

else

t[k].full=v;}

seg merge(seg a,seg b) //合併子節點更新父節點所有成員 ,返回結構體

void pushup(int k)//利用子節點更新父節點

//下傳有什麼用 。把父節點的資訊下傳給子節點

void pushdown(int k)

if(t[k].rev)

}void build(int k,int l,int r)

else

return;

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

build(k<<1,l,mid);

build(k<<1|1,mid+1,r);

pushup(k);//更新父節點

}//修改乙個區間的值時,要先向下更新子節點,再向上更新父節點

void change(int k,int x,int y,int v)

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

if(mid>=y)change(k<<1,x,y,v);

else if(mid>1;

if(mid>=y)rever(k<<1,x,y);

else if(mid>1;

if(mid>=y)return ask(k<<1,x,y);

else if(mid>1;

if(mid>=y)return asksum(k<<1,x,y);

else if(midelse return asksum(k<<1,x,mid)+asksum(k<<1|1,mid+1,y);

}int main()

}return 0;

}

P2572 SCOI2010 序列操作

對自己 rng 驕兵必敗 lpl 加油!題目描述 lxhgww最近收到了乙個01序列,序列裡面包含了n個數,這些數要麼是0,要麼是1,現在對於這個序列有五種變換操作和詢問操作 0 a b 把 a,b 區間內的所有數全變成0 1 a b 把 a,b 區間內的所有數全變成1 2 a b 把 a,b 區間...

P2572 SCOI2010 序列操作

這道題給你好多的01串,還有好多的區間統一賦值。沒錯,你想到了什麼?珂朵莉樹!所以你就可以用珂朵莉樹很輕鬆地水過這道題了!唯一要注意的是split的順序。必須先split右邊的,再split左邊的。原因是先split左邊的時候,可能會因為split右邊而導致原迭代器被刪掉了,所以左邊的迭代器會是乙個...

P2572 SCOI2010 序列操作

線段樹神仙操作 珂朵莉樹基本操作?珂朵莉樹是不可能的,這輩子只會碼線段樹,只有線段樹神仙操作才刺激,debug之後ac才最快樂 這題我折騰了半個下午加半個晚上。維護的東西太多了。如果沒有區間反轉,這題很簡單,但是有反轉,所以既要維護1,又要維護0。tot記錄區間中1的個數 len記錄區間長度 l記錄...