博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AC日记——红色的幻想乡 洛谷 P3801
阅读量:6118 次
发布时间:2019-06-21

本文共 1676 字,大约阅读时间需要 5 分钟。

 

思路:

  线段树+容斥原理;

 

代码:

#include 
using namespace std;#define maxn 100005#define maxm maxn<<2#define ll long longclass TreeType { private: int L[maxm],R[maxm],mid[maxm],dis[maxm]; public: void build(int now,int l,int r) { L[now]=l,R[now]=r,dis[now]=0; if(l==r) return;mid[now]=l+r>>1; build(now<<1,l,mid[now]),build(now<<1|1,mid[now]+1,r); } void updata(int now,int to) { if(L[now]==R[now]) { dis[now]^=1; return; } if(to<=mid[now]) updata(now<<1,to); else updata(now<<1|1,to); dis[now]=dis[now<<1]+dis[now<<1|1]; } int query(int now,int l,int r) { if(L[now]>=l&&R[now]<=r) return dis[now]; int res=0; if(l<=mid[now]) res+=query(now<<1,l,r); if(r>mid[now]) res+=query(now<<1|1,l,r); return res; }};struct TreeType tree1,tree2;int n,m,q;inline void in(int &now){ char Cget=getchar();now=0; while(Cget>'9'||Cget<'0') Cget=getchar(); while(Cget>='0'&&Cget<='9') { now=now*10+Cget-'0'; Cget=getchar(); }}int main(){ in(n),in(m),in(q); tree1.build(1,1,n); tree2.build(1,1,m); int op,x1,y1,x2,y2; while(q--) { in(op),in(x1),in(y1); if(op==1) tree1.updata(1,x1),tree2.updata(1,y1); else { in(x2),in(y2); ll ans1=tree1.query(1,x1,x2),ans2=tree2.query(1,y1,y2); printf("%lld\n",ans1*(y2-y1+1)+ans2*(x2-x1+1)-ans1*ans2*2); } } return 0;}

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6979639.html

你可能感兴趣的文章
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
android studio修改新项目package名称
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Hadoop2.5.0 搭建实录
查看>>
实验吧 recursive write up
查看>>
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
查看>>
go test命令參数问题
查看>>
linux 搜索文本
查看>>
超实用Mac软件分享(二)
查看>>
Android JSON数据解析
查看>>