记录编号 |
393664 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[IOI 2001] 移动电话 |
最终得分 |
100 |
用户昵称 |
Hyoi_0Koto |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.093 s |
提交时间 |
2017-04-11 20:41:04 |
内存使用 |
2.59 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cctype>
#define maxn 1025
#define gys mylove
using namespace std;
int tr[maxn][maxn]={0};
int s;
inline void in(int &x)
{
x=0;int f=1;char t=getchar();
while(!isdigit(t)){if(t=='-')f=-1;t=getchar();}
while(isdigit(t)){x=x*10+t-48;t=getchar();}
x*=f;
}
inline int lowbit(int x){
return x&(-x);
}
inline void add(int x,int y,int a){
for(int i=x;i<=s;i+=lowbit(i)){
for(int j=y;j<=s;j+=lowbit(j)){
tr[i][j]+=a;
}
}
}
inline int sum(int x,int y){
int ans=0;
for(int i=x;i>0;i-=lowbit(i)){
for(int j=y;j>0;j-=lowbit(j)){
ans+=tr[i][j];
}
}
return ans;
}
inline int addsum(int l,int b,int r,int t){
return sum(r,t)-sum(r,b-1)-sum(l-1,t)+sum(l-1,b-1);
}
inline bool work(void){
int cmd,x,y,a,l,b,r,t;
in(cmd);
if(cmd==3) return false;
else if(cmd==0) in(s);
else if(cmd==1) in(x),in(y),in(a),add(x+1,y+1,a);
else if(cmd==2) in(l),in(b),in(r),in(t),printf("%d\n",addsum(l+1,b+1,r+1,t+1));
return true;
}
inline int Main(){
freopen("mobilephones.in","r",stdin);
freopen("mobilephones.out","w",stdout);
while(work());
return 0;
}
int main(){;}
int gys=Main();