using namespace std; const int maxn=100000+5; int sumv[maxn*10],rev[maxn*10]; int n,m; #define mid (l+(r-l)/2) #define lson o*2 #define rson o*2+1 void (int o,int l,int r) { sumv[o]=sumv[lson]+sumv[rson]; } void getxor(int o,int l,int r) { rev[o]^=1; sumv[o]=(r-l+1)-sumv[o]; } void pushdown(int o,int l,int r) { if(rev[o]){ rev[o]=0; getxor(lson,l,mid);getxor(rson,mid+1,r); } } void update(int o,int l,int r,int ql,int qr) { if(ql>r || qr<l) return; if(ql<=l && r<=qr) {getxor(o,l,r);return;} else{ pushdown(o,l,r); update(lson,l,mid,ql,qr); update(rson,mid+1,r,ql,qr); maintain(o,l,r); } } int query(int o,int l,int r,int ql,int qr) { if(ql>r || qr<l) return 0; if(ql<=l && r<=qr) return sumv[o]; else{ int res=0; pushdown(o,l,r); res+=query(lson,l,mid,ql,qr); res+=query(rson,mid+1,r,ql,qr); return res; } } int main() { scanf("%d%d",&n,&m); int op,l,r; for(int i=0;i<m;i++) { scanf("%d%d%d",&op,&l,&r); if(op==0) update(1,1,n,l,r); else printf("%dn",query(1,1,n,l,r)); } return 0; }
|
近期评论