2683: 简单题

Time Limit: 50 Sec  Memory Limit: 128 MB

Description

你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:

命令

参数限制

内容

1 x y A

1<=x,y<=N,A是正整数

将格子x,y里的数字加上A

2 x1 y1 x2 y2

1<=x1<= x2<=N

1<=y1<= y2<=N

输出x1 y1 x2 y2这个矩形内的数字和

3

终止程序

Input

输入文件第一行一个正整数N。
接下来每行一个操作。
 

Output

对于每个2操作,输出一个对应的答案。
 

Sample Input

4
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3

Sample Output

3
5

HINT

1<=N<=500000,操作数不超过200000个,内存限制20M。
对于100%的数据,操作1中的A不超过2000。

Source

 拆点,cdq分治,第一维排序,第二维树状数组维护
 
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 1000000007
#define ll long long
#define N 2000010
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct qaz{int op,x,y,v,dd;}q[N];
bool cmp(qaz a,qaz b){return a.x==b.x?a.y<b.y:a.x<b.x;}
int n,ans[N],m,ji[N],mm;
int c[N];
void add(int x,int v){for(int i=x;i<=n;i+=i&(-i)) c[i]+=v;}
int fd(int x){int sum=;for(int i=x;i;i-=i&(-i)) sum+=c[i];return sum;}
void cdq(int l,int r)
{
if(l==r) return;
int mid=l+r>>;
cdq(l,mid);cdq(mid+,r);
sort(q+l,q+mid+,cmp);
sort(q+mid+,q+r+,cmp);
int i=l,j=mid+,lst=;
while(j<=r)
{
while(q[i].op==&&i<=mid) i++;
while(q[j].op==&&j<=r) j++;
if(i<=mid&&q[i].x<=q[j].x) add(q[i].y,q[i].v),lst=i++;
else if(j<=r) ans[q[j].dd]+=fd(q[j].y),j++;
}
for(i=l;i<=lst;i++) if(q[i].op==) add(q[i].y,-q[i].v);
}
int main()
{
n=rd();
int op,x,y,A,x2,y2;
while()
{
op=rd();
if(op==)
{
x=rd();y=rd();A=rd();
q[++m]=(qaz){,x,y,A,m};
}
else if(op==)
{
x=rd();y=rd();x2=rd();y2=rd();
ji[++mm]=m;
q[++m]=(qaz){,x2,y2,,m};
q[++m]=(qaz){,x-,y-,,m};
q[++m]=(qaz){,x2,y-,,m};
q[++m]=(qaz){,x-,y2,,m};
}
else break;
}
cdq(,m);
for(int i=,p=ji[i];i<=mm;i++,p=ji[i])
printf("%d\n",ans[p+]+ans[p+]-ans[p+]-ans[p+]);
return ;
}

最新文章

  1. Fresnel Reflection - 菲涅尔反射
  2. 过渡transitioin
  3. timingFunction
  4. eclipse内置tomcat启动方法
  5. paramiko堡垒机、线程及锁
  6. iOS-xib(使用XIB实现嵌套自定义视图)
  7. c++中string类的详解
  8. #maven系列(4)-maven插件的介绍
  9. 解决JDeveloper运行慢的设置/BPM/SOA Server JVM参数设定
  10. js使用技巧大全
  11. SSE2 Intrinsics各函数介绍[转]
  12. Python网络编程socket练习(TCP)
  13. RabbitMQ使用详解
  14. 网站HTTP升级HTTPS完全配置手册
  15. python自定义pi函数的代码
  16. STM32F103 ------ BOOT0 / BOOT1
  17. lua语言中的假
  18. 详细解析HTML基础结构
  19. C# 线程中使用delegate对控件进行操作
  20. Netty+MUI从零打造一个仿微信的高性能聊天项目,兼容iPhone/iPad/安卓

热门文章

  1. JDK1.8源码LinkedList
  2. Permutation Index I &amp; II
  3. go 切片
  4. RabbitMQ学习(一):RabbitMQ要点简介
  5. OSGiBundle出现 Could not find bundle: org.eclipse.equinox.console的解决方案
  6. 手淘移动适配方案flexible.js兼容bug处理
  7. IPv4的核心管理功能/proc/sys/net/ipv4/*
  8. IntelliJ IDEA 修改IDE字体、代码字体。
  9. [C++]返回最值元素
  10. MIT6.006Lec03:插入排序,归并排序,递归树