比赛 2026.9.5 评测结果 AAAAAAAAAAAAAAA
题目名称 Pretty Pens 最终得分 100
用户昵称 郑霁桓 运行时间 5.543 s
代码语言 C++ 内存使用 28.49 MiB
提交时间 2026-09-05 12:56:32
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,q,as,x,y,z,a[200005],b[200005];
multiset<long long>st[200005],mx,nn;
int main(){
    freopen("Pens.in","r",stdin);
    freopen("Pens.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
        st[a[i]].insert(b[i]);
    }
    for(int i=1;i<=m;i++){
        auto it=--st[i].end();
        x=*it;
        as+=x;
        mx.insert(x);
        while(it!=st[i].begin()){
            it--;
            nn.insert(*it);
        }
    }
    if(!nn.empty()) cout<<as+max(0ll,*(--nn.end())-*mx.begin())<<"\n";
    else cout<<as<<"\n";
    for(int qq=1;qq<=q;qq++){
        cin>>x>>y>>z;
        if(x==1){
            if(a[y]==z) continue;
            if(*(--st[a[y]].end())==b[y]){
                as-=b[y];
                mx.erase(mx.find(b[y]));
                st[a[y]].erase(st[a[y]].find(b[y]));
                int p=*(--st[a[y]].end());
                as+=p;
                nn.erase(nn.find(p));
                mx.insert(p);
            }else{
                nn.erase(nn.find(b[y]));
                st[a[y]].erase(st[a[y]].find(b[y]));
            }
            a[y]=z;
            if(*(--st[z].end())<b[y]){
                int p=*(--st[z].end());
                as+=b[y]-p;
                mx.erase(mx.find(p));
                nn.insert(p);
                mx.insert(b[y]);
            }else nn.insert(b[y]);
            st[a[y]].insert(b[y]);
        }else{
            if(*(--st[a[y]].end())==b[y]){
                if(st[a[y]].size()==1){
                    as+=z-b[y];
                    mx.erase(mx.find(b[y]));
                    mx.insert(z);
                }else{
                    auto it=--st[a[y]].end();
                    --it;
                    if(*it>z){
                        as+=(*it)-b[y];
                        mx.erase(mx.find(b[y]));
                        mx.insert(*it);
                        nn.erase(nn.find(*it));
                        nn.insert(z);
                    }else{
                        as+=z-b[y];
                        mx.erase(mx.find(b[y]));
                        mx.insert(z);
                    }
                }
            }else{
                auto it=--st[a[y]].end();
                if(*it>z){
                    nn.erase(nn.find(b[y]));
                    nn.insert(z);
                }else{
                    as+=z-(*it);
                    mx.erase(mx.find(*it));
                    mx.insert(z);
                    nn.erase(nn.find(b[y]));
                    nn.insert(*it);
                }
            }
            st[a[y]].erase(st[a[y]].find(b[y]));
            b[y]=z;
            st[a[y]].insert(z);
        }
        if(!nn.empty()) cout<<as+max(0ll,*(--nn.end())-*mx.begin())<<"\n";
        else cout<<as<<"\n";
    }
    return 0;
}