題意還是很明顯的,支援區間取反,區間查詢。
所以我們線段樹的sum陣列開成二維的,第一維記錄關的燈的數量,第二維記錄開著的燈的數量。
push_down的lazy標記就swap一下0和1的個數。
查詢時返回區間1的sum即可。
#includeusing namespace std;
const int maxn=1e5+10;
int laz[maxn<<2];
int zt[maxn<<2],sum[maxn<<2][2];
int n,q;
void push_up(int root)
void push_down(int root)
}void build(int root,int l,int r)
int mid=l+r>>1;
build(root<<1,l,mid);
build(root<<1|1,mid+1,r);
push_up(root);
}void update(int root,int l,int r,int l,int r)
push_down(root);
int mid=l+r>>1;
if(l<=mid)
update(root<<1,l,mid,l,r);
if(r>mid)
update(root<<1|1,mid+1,r,l,r);
push_up(root);
}int query(int root,int l,int r,int l,int r)
int main()
return 0;
}
洛谷 p3870 開關 線段樹模板
這兩天學了很長時間於是做了一道水題 我就用了模板,就連任何優化都沒有 就ac了,複雜度也很 10個點1500多毫秒 這個題就是把lazy改成記錄下修改的次數,每次修改的時候mod 2,因為反過來再返回去就一樣了 修改變成 sum root r l 1 sum root 其他的幾乎就沒區別了 incl...
洛谷P2846 光開關 線段樹
給出乙個01串,每次有兩種操作 首先,這是一道三倍經驗題。p2574 xor的藝術 p3870 tjoi2009 開關 這兩道題可以用分塊做,但是光開關用分塊會t 這道題其實就是乙個裸的線段樹。用tre e x ltr ee x l和t ree x r tree x r表示這個區間的左右端點,tre...
洛谷 3373 線段樹
傳送門 思路 關鍵在於乘與加的先後計算關係,x y k x k y k,從這裡可以看出來,把加法轉化為乘法計算,取消了 與 先後順序 pushdown時,即為乘法標記 原有資料 加法標記 長度。注意點 這個題資料範圍取long long 讀入的k也是long long,傳入函式時用long long...