原题

给出W×W的矩阵(S没有用,题目有误),给出无限次操作,每次操作的含义为:

输入1:你需要把(x,y)(第x行第y列)的格子权值增加a

输入2:你需要求出以左下角为(x1,y1),右上角为(x2,y2)的矩阵内所有格子的权值和,并输出

输入3:表示输入结束


因为修改之间相互独立,所以可以用CDQ。

三个维度分别为时间,x轴,y轴。

简单的三维偏序即可。

#include<cstdio>
#include<algorithm>
#define N 200010
using namespace std;
struct hhh
{
int x,y,w,pos,id,op;
bool operator < (const hhh &b) const
{
if (x==b.x && y==b.y) return op<b.op;
if (x==b.x) return y<b.y;
return x<b.x;
}
}q[N],tmp[N];
int s,w,n,ans[N],m,op,f[10*N]; int read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
} void addquery()
{
int lx=read(),ly=read(),rx=read(),ry=read();
int pos=++ans[0];
q[++m].pos=pos;q[m].id=m;q[m].x=lx-1;q[m].y=ly-1;q[m].w=1;q[m].op=1;
q[++m].pos=pos;q[m].id=m;q[m].x=rx;q[m].y=ry;q[m].w=1;q[m].op=1;
q[++m].pos=pos;q[m].id=m;q[m].x=lx-1;q[m].y=ry;q[m].w=-1;q[m].op=1;
q[++m].pos=pos;q[m].id=m;q[m].x=rx;q[m].y=ly-1;q[m].w=-1;q[m].op=1;
} void add(int x,int y)
{
while (x<=w)
{
f[x]+=y;
x+=x&-x;
}
} int query(int x)
{
int ans=0;
while (x)
{
ans+=f[x];
x-=x&-x;
}
return ans;
} void CDQ(int l,int r)
{
if (l==r) return ;
int mid=(l+r)>>1,i=l,j=mid+1;
for (int k=l;k<=r;k++)
{
if (q[k].id<=mid && !q[k].op)
add(q[k].y,q[k].w);
if (q[k].id>mid && q[k].op)
ans[q[k].pos]+=q[k].w*query(q[k].y);
}
for (int k=l;k<=r;k++)//清空树状数组
if (q[k].id<=mid && !q[k].op) add(q[k].y,-q[k].w);
for (int k=l;k<=r;k++)
if (q[k].id<=mid) tmp[i++]=q[k];
else tmp[j++]=q[k];
for (int k=l;k<=r;k++)
q[k]=tmp[k];
CDQ(l,mid);
CDQ(mid+1,r);
} int main()
{
s=read();
w=read();
while (1)
{
op=read();
if (op==1)
{
q[++m].x=read();
q[m].y=read();
q[m].w=read();
q[m].id=m;
}
else if (op==2)
addquery();
else break;
}
sort(q+1,q+m+1);
CDQ(1,m);
for (int i=1;i<=ans[0];i++)
printf("%d\n",ans[i]);
return 0;
}

最新文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
  2. tomcat 配置项目指定域名
  3. elasticsearch rpm 安装
  4. PAT (Advanced Level) Practise:1027. Colors in Mars
  5. JS替换函数
  6. 带优先级的队列 - PHP实现
  7. ModelProxy 前端接口配置建模框架
  8. SQL Server2008附加数据库之后显示为只读
  9. 如何用jquery操作table的方法
  10. 问题-[Delphi]PixelFormat 图像颜色的数据格式
  11. Android 模拟器上的127.0.0.1 localhost
  12. CSV文件规则
  13. node源码详解(七) —— 文件异步io、线程池【互斥锁、条件变量、管道、事件对象】
  14. Mysql查询不为null值
  15. canvas画布,时钟
  16. JBOSS EAP 6 系列五 Managed domains 管理域最主要的功能是“统一部署,统一配置”
  17. 执行find / -name *.sh时报错 find: 路径必须在表达式之前: start-ressvr-release.sh
  18. 第一节 Python基础之数据类型(整型,布尔值,字符串)
  19. MapperScan和ComponentScan同时使用问题
  20. 前端-JavaScript2-1——JavaScript基础复习及上次作业答案

热门文章

  1. jquery 操作ajax 相关方法
  2. JavaScript 十行原生代码实现复制内容到剪贴板
  3. Java - 得到项目中properties属性文件中定义的属性值
  4. python导包语句执行
  5. mongodb多个查询语句
  6. MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!
  7. Shell学习——Shell分类:登录shell和非登陆shell 交互shell和非交互shell
  8. 百度MIP校验错误整理与解决方法
  9. MySQL Limit 限定查询记录数
  10. 1016-06-首页20-封装工具条-有控件在viewDidLoad的时候距离顶部是0--到了viewWillAppear或viewDidAppear系统就加了64