bzoj1230: [Usaco2008 Nov]lites 開關燈(線段樹)
題目傳送門
…..
解法:
裸線段樹。。
打個lazy。。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
struct node {int l,r,lc,rc,c,n,lazy;}tr[210000];int len;
void bt(int l,int r) {
int now=++len;tr[now].l=l;tr[now].r=r;tr[now].lc=tr[now].rc=-1;tr[now].c=0;tr[now].n=r-l+1;tr[now].lazy=0;
if(l<r) {int mid=(l+r)/2;tr[now].lc=len+1;bt(l,mid);tr[now].rc=len+1;bt(mid+1,r);}
}
void update(int now) {
int lc=tr[now].lc,rc=tr[now].rc;
tr[now].lazy=0;tr[lc].lazy^=1;tr[rc].lazy^=1;
tr[lc].c=tr[lc].n-tr[lc].c;tr[rc].c=tr[rc].n-tr[rc].c;
}
void change(int now,int l,int r) {
if(tr[now].lazy)update(now);
if(tr[now].l==l&&tr[now].r==r) {tr[now].c=(tr[now].n-tr[now].c);tr[now].lazy^=1;return ;}
int lc=tr[now].lc,rc=tr[now].rc,mid=(tr[now].l+tr[now].r)/2;
if(r<=mid)change(lc,l,r);else if(l>mid)change(rc,l,r);
else {change(lc,l,mid);change(rc,mid+1,r);}
tr[now].c=tr[lc].c+tr[rc].c;
}
int find_sum(int now,int l,int r) {
if(tr[now].lazy)update(now);
if(tr[now].l==l&&tr[now].r==r)return tr[now].c;
int lc=tr[now].lc,rc=tr[now].rc,mid=(tr[now].l+tr[now].r)/2;
if(r<=mid)return find_sum(lc,l,r);else if(l>mid)return find_sum(rc,l,r);
else return find_sum(lc,l,mid)+find_sum(rc,mid+1,r);
}
int main() {
int n,m;scanf("%d%d",&n,&m);len=0;bt(1,n);
for(int i=1;i<=m;i++) {
int t,x,y;scanf("%d%d%d",&t,&x,&y);
if(x>y)swap(x,y);
if(t==0)change(1,x,y);
else printf("%d\n",find_sum(1,x,y));
}
return 0;
}
相關文章
- BZOJ 1230 [Usaco2008 Nov]lites 開關燈:線段樹異或
- 關於線段樹基礎
- 動態開點線段樹
- 線~段~樹
- 線段樹
- 線段樹 hate it
- 【模版】線段樹
- 01 線段樹
- 線段樹--RMQMQ
- 李超線段樹
- 線段樹模板
- 動態開點線段樹說明
- ut.cpp 最大線段並減線段交 [線段樹]
- 線段樹筆記筆記
- 線段樹入門
- 權值線段樹
- 線段樹進階
- 線段樹(毒瘤)總結
- 線段樹模板總結
- 深入理解線段樹
- 線段樹入門理解
- 線段樹(超詳解)
- 第二課——線段樹
- 線段樹簡單思路
- 線段樹擴充套件套件
- 線段樹 transformation——hdu 4578ORM
- 可持久化線段樹持久化
- 線段樹 - 多組圖帶你從頭到尾徹底理解線段樹
- 帶燈LED按鈕開關接線方法
- 資料結構之樹( 線段樹,字典樹)資料結構
- 資料結構-線段樹資料結構
- 淺談線段樹(Segment Tree)
- hdu 1754 I Hate It (線段樹)
- 線段樹學習筆記筆記
- 線段樹合併 筆記筆記
- [18/03/24] 線段樹模板
- 【筆記/模板】線段樹(改)筆記
- 線段樹入門(Segment Tree)