比赛 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;
}