#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記錄...