比赛 |
EYOI暨SBOI暑假快乐赛3rd |
评测结果 |
TTTTETTTTT |
题目名称 |
移动电话 |
最终得分 |
0 |
用户昵称 |
➥Q小白小黑233 |
运行时间 |
9.191 s |
代码语言 |
C++ |
内存使用 |
13.77 MiB |
提交时间 |
2022-06-27 09:50:38 |
显示代码纯文本
#include<cstdio>
#include<cmath>
#include<iostream>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<utility>
const int UMAX=60002,SMAX=1024;
using namespace std;
typedef long long ll;
int S;
int m[(SMAX+2)*(SMAX+2)]={};//Start Menu
int C[(SMAX+2)*(SMAX+2)]={};
//Version ↑
int inline xy(const int & x,const int & y){
//V2→V1
return x+(y-1)*S;
}
int inline lowbit(const int & in){
//LOWBIT
return in&(-in);
}
void update(int in,const int up);
int sum(int in);
int sum(int x,int y);
int main(){
freopen("mobilephones.in","r",stdin);
freopen("mobilephones.out","w",stdout);
int i;
for(i=0;i<UMAX;i++){
int mode;
int i1,i2,i3,i4;
cin>>mode;//Get in
if(mode==3){
break;
}
if(mode==0){
cin>>S;
}
if(mode==1){
cin>>i1>>i2>>i3;//X,Y,A(+/-)
m[xy(i1,i2)]+=i3;//1V Array
update(xy(i1,i2),i3);
}else if(mode==2){
cin>>i1>>i2>>i3>>i4;
int o,p;
ll out=0;
cout<<sum(1,S*S)<<endl;
}
}
return 0;
}
int sum(int in){
int out=0;
for(in;in;in-=lowbit(in)){
out+=C[in];
}
return out;
}
int sum(int x,int y){
return sum(y)-sum(x-1);
}
void update(int in,const int up){
for(in;in<=S*S;in+=lowbit(in)){
C[in]+=up;
}
return;
}