比赛 2026.9.5 评测结果 AAAAAAAAWAWTTTT
题目名称 Pretty Pens 最终得分 58
用户昵称 杨蕙宇 运行时间 13.908 s
代码语言 C++ 内存使用 16.20 MiB
提交时间 2026-09-05 11:25:54
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
const ll INF=0x3f3f3f3f;
ll n,m,q;
struct node{
    ll id,c,p;
};
vector<node>v;
bool cmp(node x,node y){
    return x.p>y.p;
}
struct cmp2{
    bool operator()(const node& x,const node& y)const{
        return x.p<y.p;
    }
};
ll tmp[N];
ll mk[N];
priority_queue<node,vector<node>,cmp2>s;
priority_queue<node,vector<node>,cmp2>r[N];
node b[N];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    freopen("Pens.in","r",stdin);
    freopen("Pens.out","w",stdout);
    cin>>n>>m>>q;
    if(q==0){
        ll ans=0;
        ll cnt=0;
        bool f=0; 
        for(int i=1;i<=n;i++){
            ll c,p;
            cin>>c>>p;
            v.push_back({i,c,p});
        }
        sort(v.begin(),v.end(),cmp);
        for(int i=0;i<v.size();i++){
            ll c=v[i].c;
            ll p=v[i].p;
            if(mk[c]&&f)continue;
            else if(mk[c]&&(!f)){
                f=1;
                ans+=p;
                cnt++;
            }
            else if(!mk[c]){
                ans+=p;
                mk[c]=1;
                cnt++;
            }
            if(cnt>=m)break;
        }
        cout<<ans;
    }
    else if(m==1){
        for(int i=1;i<=n;i++){
            ll c,p;
            cin>>c>>p;
            s.push({i,c,p});
            tmp[i]=p;
        }
        cout<<(s.top().p)<<"\n";
        while(q--){
            ll op,x,y;
            cin>>op>>x>>y;
            if(op==2){
                tmp[x]=y;
                s.push({x,1,y});
            }
            while(s.size()){
                node f=s.top();
                if(f.p!=tmp[f.id])s.pop();
                else{
                    cout<<f.p<<"\n";
                    break;
                }
            }
        } 
    }
    else{
        for(int i=1;i<=n;i++){
            ll c,p;
            cin>>c>>p;
            b[i]={i,c,p};
            r[c].push({i,c,p});
        }
        ll ans=0;
        ll sum=0;
        ll mn=INF;
        ll mx=0;
        for(int i=1;i<=m;i++){
            node f1=r[i].top();
            r[i].pop();
            sum+=f1.p;
            mn=min(mn,f1.p);
            if(r[i].size()){
                node f2=r[i].top();
                mx=max(mx,f2.p);
            }
            r[i].push(f1);
        }
        if(mx>mn){
            ans=(sum-mn+mx);
        }
        else ans=sum;
        cout<<ans<<"\n";
        while(q--){
            ll op,x,y;
            cin>>op>>x>>y;
            if(op==1){
                b[x].c=y;
                r[y].push({x,y,b[x].p});
            }
            else{
                b[x].p=y;
                r[b[x].c].push({x,b[x].c,y});
            }
            ll ans=0;
            ll sum=0;
            ll mn=INF;
            ll mx=0;
            for(int i=1;i<=m;i++){
                while(r[i].size()){
                    node f3=r[i].top();
                    if(f3.c!=b[f3.id].c||f3.p!=b[f3.id].p)r[i].pop();
                    else break;
                }
                node f1=r[i].top();
                r[i].pop();
                sum+=f1.p;
                mn=min(mn,f1.p);
                while(r[i].size()){
                    node f3=r[i].top();
                    if(f3.c!=b[f3.id].c||f3.p!=b[f3.id].p)r[i].pop();
                    else break;
                }
                if(r[i].size()){
                    node f2=r[i].top();
                    mx=max(mx,f2.p);
                }
                r[i].push(f1);
            }
            if(mx>mn){
                ans=(sum-mn+mx);
            }
            else ans=sum;
            cout<<ans<<"\n"; 
        }
    }
    return 0;
}
/*
7 4 3
   c p
1: 2 3
2: 1 2 
3: 4 6
4: 3 1
5: 4 4
6: 4 2
7: 3 5
1 3 3
2 1 7
*/