题意:给出两种操作,C是给出一个矩形的左上角和左下角的下标,把这个矩形里面的0变成1,1变成0,Q是询问某个点的值

看这篇论文讲得很清楚

http://wenku.baidu.com/view/1e51750abb68a98271fefaa8

自己看的时候,把每个点对应覆盖哪些区域画出来,再结合论文里面的,好理解一些

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int n;
int c[maxn][maxn]; int lowbit(int x){ return x & (-x);} int sum(int x,int y){
int ret=,y1;
while(x>){
y1=y;
while(y1>){
ret+=c[x][y1];y1-=lowbit(y1);
}
x-=lowbit(x);
}
return ret;
} void add(int x,int y,int d){
int y1;
while(x<=n){
y1=y;
while(y1<=n){
c[x][y1]+=d;y1+=lowbit(y1);
}
x+=lowbit(x);
}
} int main(){
int T;
scanf("%d",&T);
while(T--){
int m;
memset(c,,sizeof(c));
scanf("%d%d%*c",&n,&m);
while(m--){
char ch;
scanf("%c",&ch);
if(ch == 'C'){
int x1,y1,x2,y2;
scanf("%d%d",&x1,&y1);
scanf("%d%d%*c",&x2,&y2);
add(x1,y1,);
add(x1,y2+,-);
add(x2+,y1,-);
add(x2+,y2+,);
}
else {
int l,r;
scanf("%d%d%*c",&l,&r);
int ans;
ans=sum(l,r);
printf("%d\n",ans%);
}
}
if(T>=) puts("");
}
return ;
}

最新文章

  1. W3School-CSS 表格实例
  2. 移动端框架篇-控制父容器的滑屏框架-slip.js
  3. python raw String 获取字符串变量中的反斜杠
  4. SQL 面试题及答案(一)
  5. 怎么找到MyEclipse-&gt;add struts capabilities
  6. NSDate和NSString的转换及判定是昨天,今天,明天
  7. calling c++ from golang with swig--windows dll(一)
  8. 《RabbitMQ Tutorial》译文 第 3 章 发布和订阅
  9. 一.初识java
  10. 【English】20190428
  11. Requests模块—请求
  12. Maven中classifier
  13. kafka channle的应用案例
  14. 机器学习实战-ch2-有标签的聚类算法
  15. syslog - 日志文件详解
  16. Asp.netMVC中Html.Partial,RenderPartial,Action,RenderAction区别和用法
  17. java好用的邮件发送
  18. sidecar学习
  19. 爬虫实战:汽车之家配置页面 破解伪元素和混淆JS
  20. 如何编写 Python 程序

热门文章

  1. Android Studio 插件 GsonFormat :你还在烦恼 为 Json格式 生成 JavaBean实体类吗?
  2. Typescript 模拟实现 多继承
  3. js数组去重的四种方式
  4. APICloud资料
  5. freeswitch mod_xml_curl
  6. JS中常用开发知识点
  7. mysql5.7官网直译SQL语句优化--分组优化
  8. WinServer-PowerShell基础
  9. maven小知识点
  10. 面向程序猿的设计模式 ——GoF《设计模式》读书总结(壹)抽象工厂&amp;amp;生成器