题意:说实话这个题读了半天也没读懂题意,读懂后秒解。。。
思路:用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);
}
}