赛之河原的垒石人
原题目名:赛之河原的垒石人
如果立方体柱子互不相邻那么答案就是
在堆叠立方体的时候即可去处理柱子相邻的情况。不妨设在这个无穷大平面上,每个点
而如何去维护 map<long long,long long> 去解决。本题没有卡 unordered_map,但是你要是 unordered_map 套 unordered_map 会被卡死。
答案最大是多少?显然是所有柱子都不相邻且最高的时候产生,即
#include <iostream>
#include <map>
using namespace std;
const int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
map <int,map<int,long long>> G;
unsigned long long ans;
int main()
{
int n;
cin >> n;
for (int i=1;i<=n;i++)
{
int x,y;
long long z;
cin >> x >> y >> z;
for (int j=0;j<4;j++)
{
int nx=x+dx[j],ny=y+dy[j];
if (G[nx][ny]>G[x][y])
ans-=2ull*min(z,G[nx][ny]-G[x][y]);
}
G[x][y]+=z;
ans+=4ull*z;
cout << ans << endl;
}
return 0;
}