洛谷——P3801 红色的幻想乡
P3801 红色的幻想乡
推荐阅读 https://blog.csdn.net/qq_41252892/article/details/79035942
非常清楚
线段树单点修改
emmm没什么了
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<vector> #define N 320202 using namespace std; int tr_h[N],tr_l[N]; int n,m,q; void push(int *tr,int k) { tr[k]=tr[k<<1]+tr[k<<1|1]; } void change(int *tr,int k,int l,int r,int X) { int mid=(l+r)>>1; if(l==r) { tr[k]^=1; return; } if(X<=mid) change(tr,k<<1,l,mid,X); else change(tr,k<<1|1,mid+1,r,X); push(tr,k); } int ask(int *tr,int k,int l,int r,int ql,int qr) { int mid=(l+r)>>1; if(ql<=l&&qr>=r) return tr[k]; int ans=0; if(ql<=mid) ans+=ask(tr,k<<1,l,mid,ql,qr); if(qr>mid) ans+=ask(tr,k<<1|1,mid+1,r,ql,qr); push(tr,k); return ans; } int main() { scanf("%d%d%d",&n,&m,&q); for(int opt,x_1,x_2,y_1,y_2,i=1; i<=q; i++) { scanf("%d",&opt); if(opt==1) { scanf("%d%d",&x_1,&x_2); change(tr_h,1,1,n,x_1); change(tr_l,1,1,n,x_2); }else{ scanf("%d%d%d%d",&x_1,&y_1,&x_2,&y_2); int xx=ask(tr_h,1,1,n,x_1,x_2),yy=ask(tr_l,1,1,n,y_1,y_2); printf("%lld\n",1ll*xx*(y_2-y_1+1)+1ll*yy*(x_2-x_1+1)-1ll*2*xx*yy); } } return 0; }
博主蒟蒻,若有出错的地方,敬请指出。
如有侵犯您版权的地方,请快速联系我,我会撤回本博文。