Codeforces Global Round 6 E - Spaceship Solitaire(思维)

在这里插入图片描述
在这里插入图片描述
题意:说实话这个题读了半天也没读懂题意,读懂后秒解。。。
思路:用map记录一下每组的sj和tj,答案只和uj有关,不过看了半天也没看到输入里的那句如果有里程碑重复的话算后者。。。

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+1;
typedef long long ll;
#define M(a,b)  make_pair(a,b)
int n,q,a[maxn];
ll sum=0,num[maxn];
int main()
{
	map<pair<int,int>,int>p;
	scanf("%d",&n);
	for(int i=1;i<=n;++i) scanf("%d",&a[i]),sum+=a[i];
	scanf("%d",&q);
	while(q--)
	{
		int l,r,w;
		scanf("%d %d %d",&l,&r,&w);
		if(!p[M(l,r)])
		{
			num[w]++;
			if(num[w]<=a[w]) sum--;
			p[M(l,r)]=w;
		}
		else {
			int last=p[M(l,r)];
			num[last]--;
			if(num[last]<a[last]) sum++;
			p[M(l,r)]=w;
			if(w)
			{
				num[w]++;
			if(num[w]<=a[w]) sum--;
			p[M(l,r)]=w;
			}
		}
		printf("%lld\n",sum);
	}
}
发布了70 篇原创文章 · 获赞 0 · 访问量 2451

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104128262