结论题+英语阅读理解——1266E

/*
给定数组a[],表示每种资源数目标量,一开始都是0 
每次增,删,改一个三元组(s,t,u):如果资源s数量t,那么资源u+1,可链式增加
问每次修改后达到目标资源的最少用时 

结论:直接开数组cnt[i]累计每种资源通过三元组增加的值,多出a[i]的部分去掉就是贡献 

*/
#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define ll long long 

map<pair<int,int>,int>mp; 
ll n,q,a[N],cnt[N],sum;

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
    
    cin>>q;
    while(q--){
        int s,t,u;
        scanf("%d%d%d",&s,&t,&u);
        pair<int,int>p=make_pair(s,t);
        if(mp[p]!=0){
            int last=mp[p];
            if(cnt[last]<=a[last])sum++;
            cnt[last]--;
        }
        mp[p]=u;
        if(cnt[u]<a[u])sum--;
        cnt[u]++;
        cout<<sum<<'
';
    }
    
}


 
原文地址:https://www.cnblogs.com/zsben991126/p/12293356.html