洛谷3870 開關(線段樹)

2022-08-21 02:57:10 字數 848 閱讀 6316

題意還是很明顯的,支援區間取反,區間查詢。

所以我們線段樹的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...