月赛E求解
  • 板块学术版
  • 楼主Hisaishi_Kanade
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/8/7 17:03
  • 上次更新2023/10/27 16:36:18
查看原帖
月赛E求解
575994
Hisaishi_Kanade楼主2022/8/7 17:03
#include <map>
#include <stdio.h>
#include <iostream>
using namespace std;
map< int,map<int,unsigned long long> >q;
int t,x,y;
unsigned long long ans,now,z;
int main(){
	scanf("%d",&t);
	while(t--){
		cin>>x>>y>>z;
		ans+=z*4;
		now=q[x][y];
		if(q[x-1][y])
			if(q[x-1][y]<z+now)
				ans-=max((unsigned long long)0,q[x-1][y]-now)<<1;
			else
				ans-=z<<1;
		if(q[x][y-1])
			if(q[x][y-1]<z+now)
				ans-=max((unsigned long long)0,q[x][y-1]-now)<<1;
			else
				ans-=z<<1;
		if(q[x+1][y])
			if(q[x+1][y]<z+now)
				ans-=max((unsigned long long)0,q[x+1][y]-now)<<1;
			else
				ans-=z<<1;
		if(q[x][y+1])
			if(q[x][y+1]<z+now)
				ans-=max((unsigned long long)0,q[x][y+1]-now)<<1;
			else
				ans-=z<<1;
		q[x][y]+=z;
		cout<<ans<<'\n';
	}
}

ull 48.

#include <map>
#include <stdio.h>
using namespace std;
map< int,map<int,long long> >q;
int t,x,y;
long long ans,now,z;
int main(){ 
	scanf("%d",&t);
	while(t--){
		scanf("%d %d %lld",&x,&y,&z);
		ans+=z*4;
		now=q[x][y];
		if(q[x-1][y])
			if(q[x-1][y]<z+now)
				ans-=max(0ll,q[x-1][y]-now)<<1;
			else
				ans-=z<<1;
		if(q[x][y-1])
			if(q[x][y-1]<z+now)
				ans-=max(0ll,q[x][y-1]-now)<<1;
			else
				ans-=z<<1;
		if(q[x+1][y])
			if(q[x+1][y]<z+now)
				ans-=max(0ll,q[x+1][y]-now)<<1;
			else
				ans-=z<<1;
		if(q[x][y+1])
			if(q[x][y+1]<z+now)
				ans-=max(0ll,q[x][y+1]-now)<<1;
			else
				ans-=z<<1;
		q[x][y]+=z;
		printf("%lld\n",ans);
	}
}

ll 96???

2022/8/7 17:03
加载中...