记录编号 |
446528 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[IOI 2001] 移动电话 |
最终得分 |
100 |
用户昵称 |
FFF团 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.151 s |
提交时间 |
2017-09-08 15:30:07 |
内存使用 |
8.41 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=1030;
const int maxm=1030;
struct BIT2{
int a[maxn][maxm],bit[maxn][maxm],n,m;
int lowbit(int x){return x&(-x);}
void add(int x,int y,int p){
a[x][y]+=p;
for(int i=x;i<=n;i+=lowbit(i))
for(int j=y;j<=m;j+=lowbit(j))
bit[i][j]+=p;
}
void change(int x,int y,int p){
p=p-a[x][y];
add(x,y,p);
}
int sum(int x,int y){
int res=0;
for(int i=x;i>0;i-=lowbit(i))
for(int j=y;j>0;j-=lowbit(j))
res+=bit[i][j];
return res;
}
int query(int x1,int y1,int x2,int y2){return sum(x2,y2)-sum(x2,y1-1)-sum(x1-1,y2)+sum(x1-1,y1-1);}
};
BIT2 bit;
int in(int &x){
int c=getchar(),f=1;x=0;
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
x*=f;
if(x==3)return 0;
return 1;
}
int t,t1,t2,t3,t4;
int main(){
freopen("mobilephones.in","r",stdin);
freopen("mobilephones.out","w",stdout);
in(t);
in(bit.n);bit.m=bit.n;
while(in(t)){
if(t==1){
in(t1);in(t2);in(t3);
bit.add(++t1,++t2,t3);
}
if(t==2){
in(t1);in(t2);in(t3);in(t4);
printf("%d\n",bit.query(++t1,++t2,++t3,++t4));
}
}
return 0;
}