洛谷 红魔馆OI 红色的幻想乡 [线段树]
2017-07-09 14:41
218 查看
题目传送门
我想到了两片红雾会抵消,相当于每次修改,对应行^=1,对应列^=1。
但是没有想到可以建立两棵线段树分别维护每行,每列有没有释放过红雾。
于是沙茶地建了个树套树+cdq分治光荣WA。
我想到了两片红雾会抵消,相当于每次修改,对应行^=1,对应列^=1。
但是没有想到可以建立两棵线段树分别维护每行,每列有没有释放过红雾。
于是沙茶地建了个树套树+cdq分治光荣WA。
//直接上标答 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long #define lson (rt<<1) #define rson ((rt<<1)|1) #define mid ((l+r)>>1) using namespace std; int sumx[400011],sumy[400011]; int n,m,q,op,px1,py1,px2,py2; void insx(int rt,int l,int r,int x) { if(l==r) { sumx[rt]^=1; return; } if(x<=mid)insx(lson,l,mid,x); else insx(rson,mid+1,r,x); sumx[rt]=sumx[lson]+sumx[rson]; } int quex(int rt,int l,int r,int L,int R) { if(L<=l&&r<=R)return sumx[rt]; if(mid+1>R)return quex(lson,l,mid,L,R); if(L>mid)return quex(rson,mid+1,r,L,R); return quex(lson,l,mid,L,R)+quex(rson,mid+1,r,L,R); } void insy(int rt,int l,int r,int x) { if(l==r) { sumy[rt]^=1; return; } if(x<=mid)insy(lson,l,mid,x); else insy(rson,mid+1,r,x); sumy[rt]=sumy[lson]+sumy[rson]; } int quey(int rt,int l,int r,int L,int R) { if(L<=l&&r<=R)return sumy[rt]; if(mid+1>R)return quey(lson,l,mid,L,R); if(L>mid)return quey(rson,mid+1,r,L,R); return quey(lson,l,mid,L,R)+quey(rson,mid+1,r,L,R); } int main() { scanf("%d%d%d",&n,&m,&q); while(q--) { scanf("%d%d%d",&op,&px1,&py1); if (op==1) { insx(1,1,n,px1); insy(1,1,m,py1); } else { scanf("%d%d",&px2,&py2); ll n1=quex(1,1,n,px1,px2),m1=quey(1,1,m,py1,py2); printf("%lld\n",n1*(ll)(py2-py1+1)+m1*(ll)(px2-px1+1)-n1*m1*2LL); } } }
相关文章推荐
- [洛谷月赛] 红色的幻想乡
- 洛谷3801:红色的幻想乡——题解
- AC日记——红色的幻想乡 洛谷 P3801
- 洛谷P3373 【模板】线段树2
- 洛谷 P3372 线段树 1(树状数组做法)
- 洛谷 2056 采花 - 可持久化线段树 - 树状数组
- 洛谷P3801 红色的幻想乡
- 洛谷3822 [NOI2017] 整数 【线段树】【位运算】
- luogu P3801 红色的幻想乡
- 线段树-洛谷P1438 无聊的数列
- 洛谷-P3373 线段树 2(线段树,区间更新,lazy标记,好题)
- 【洛谷】线段树 树状数组区间修改区间查询
- 线段树——洛谷 P1471 方差
- 【Splay】洛谷3372 【模板】线段树 1
- P3372 【模板】线段树 1 洛谷
- 【线段树】洛谷3582KIN
- 洛谷 红魔馆OI 妖梦斩木棒
- 【洛谷3372】 线段树 1
- POJ P3264 USACO 2007 洛谷 P2880 January Silver Balanced Lineup【线段树】
- 洛谷P3097 [USACO13DEC]最优挤奶Optimal Milking【线段树】