比赛 |
测试 |
评测结果 |
AAAAAAAAAA |
题目名称 |
移动电话 |
最终得分 |
100 |
用户昵称 |
YGOI_真神名曰驴蛋蛋 |
运行时间 |
0.177 s |
代码语言 |
C++ |
内存使用 |
4.30 MiB |
提交时间 |
2017-04-11 20:36:36 |
显示代码纯文本
#include <cstdio>
const int MAXN=1025;
int len;
struct FFT{
int w[MAXN];
void add(int pos,int x)
{while(pos<=len){w[pos]+=x;pos+=pos&-pos;}}
int query(int pos)
{int ans=0;while(pos>0){ans+=w[pos];pos-=pos&-pos;}return ans; }
};
struct DFT{
FFT w[MAXN];
void add(int a,int b,int x)
{while(a<=len){w[a].add(b,x);a+=a&-a;}}
int query(int a,int b)
{int ans=0;while(a>0){ans+=w[a].query(b);a-=a&-a;}return ans;}
}FT;
int query(int x1,int y1,int x2,int y2)
{return FT.query(x2,y2)-FT.query(x1-1,y2)-FT.query(x2,y1-1)+FT.query(x1-1,y1-1);}
void add(int x1,int y1,int p)
{FT.add(x1,y1,p);}
int main(){
freopen("mobilephones.in","r",stdin);
freopen("mobilephones.out","w",stdout);
scanf("%*d%d",&len);
int m,p,x1,x2,y1,y2;
while(scanf("%d",&m)){
if(m==1){
scanf("%d%d%d",&x1,&y1,&p);
add(x1+1,y1+1,p);
}else if(m==2){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
printf("%d\n",query(x1+1,y1+1,x2+1,y2+1));
}else break;
}fclose(stdin);fclose(stdout);
/// while(true);
return 0;
}