比赛 2026.9.5 评测结果 AAAAAAAAAAAAAAA
题目名称 Pretty Pens 最终得分 100
用户昵称 yanglich 运行时间 3.416 s
代码语言 C++ 内存使用 37.66 MiB
提交时间 2026-09-05 11:53:27
显示代码纯文本
 #include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,q;
int c[200005],p[200005],ma[200005],cm[200005];
int cnt[200005];
struct tree{
   int l,r,v; 
};
vector<tree>t1[200005],t2[200005];
void change(int k,int l,int r,int x,int y,int z){
    if(l==r){
        t1[x][k].v=z;
        return;
    }
    int mid=(l+r)>>1;
    if(y<=mid){
        if(t1[x][k].l==0){
            ++cnt[x];
            t1[x][k].l=cnt[x];
            t1[x].push_back({0,0,0});
            t2[x][k].l=cnt[x];
            t2[x].push_back({0,0,0});
        }   
        change(t1[x][k].l,l,mid,x,y,z);
    }
    else{
        if(t1[x][k].r==0){
            ++cnt[x];
            t1[x][k].r=cnt[x];
            t1[x].push_back({0,0,0});
            t2[x][k].r=cnt[x];
            t2[x].push_back({0,0,0});
        }
        change(t1[x][k].r,mid+1,r,x,y,z);
    }
    t1[x][k].v=max(t1[x][t1[x][k].l].v,t1[x][t1[x][k].r].v);
    t2[x][k].v=max(min(t1[x][t1[x][k].l].v,t1[x][t1[x][k].r].v),max(t2[x][t1[x][k].l].v,t2[x][t1[x][k].r].v));
}
int tx[800005],td[800005];
ll su[800005];
void update1(int k,int l,int r,int x,int z){
    if(l==r){
        tx[k]=z;
        su[k]=z;
        return;
    }
    int mid=(l+r)>>1;
    if(x<=mid)update1(k*2,l,mid,x,z);
    else update1(k*2+1,mid+1,r,x,z);
    tx[k]=min(tx[k*2],tx[k*2+1]);
    su[k]=su[k*2]+su[k*2+1]; 
}
void update2(int k,int l,int r,int x,int z){
    if(l==r){
        td[k]=z;
        return;
    }
    int mid=(l+r)>>1;
    if(x<=mid)update2(k*2,l,mid,x,z);
    else update2(k*2+1,mid+1,r,x,z);
    td[k]=max(td[k*2],td[k*2+1]);
}
signed 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;
    for(int i=1;i<=n;i++){
        cin>>c[i]>>p[i];
    }
    if(q==0){
        for(int i=1;i<=n;i++){
            if(ma[c[i]]<p[i]){
                cm[c[i]]=ma[c[i]];
                ma[c[i]]=p[i];
            }
            else if(cm[c[i]]<p[i]){
                cm[c[i]]=p[i];
            }
        }
        int a=1e9,b=0;
        ll ans=0;
        for(int i=1;i<=m;i++){
            ans+=ma[i];
            a=min(a,ma[i]);
            b=max(b,cm[i]); 
        }
        if(b>a){
            ans=ans-a+b;
        }
        cout<<ans;
        return 0;
    }
    for(int i=1;i<=m;i++){
        cnt[i]=1;
        t1[i].push_back({0,0,0});
        t2[i].push_back({0,0,0});
        t1[i].push_back({0,0,0});
        t2[i].push_back({0,0,0});
    }
    for(int i=1;i<=n;i++){
        change(1,1,n,c[i],i,p[i]);
    }
    for(int i=1;i<=m;i++){
        update1(1,1,m,i,t1[i][1].v);
        update2(1,1,m,i,t2[i][1].v);
    }
    q++;
    int tot=0;
    while(q--){
        tot++;
        if(tot!=1){
            int op,x,y;
            cin>>op>>x>>y;
            if(op==1){
                change(1,1,n,c[x],x,0);
                update1(1,1,m,c[x],t1[c[x]][1].v);
                update2(1,1,m,c[x],t2[c[x]][1].v);
                c[x]=y;
                change(1,1,n,c[x],x,p[x]);
                update1(1,1,m,c[x],t1[c[x]][1].v);
                update2(1,1,m,c[x],t2[c[x]][1].v);
            }
            else{
                change(1,1,n,c[x],x,y);
                p[x]=y;
                update1(1,1,m,c[x],t1[c[x]][1].v);
                update2(1,1,m,c[x],t2[c[x]][1].v);
            }
        }
        int a=tx[1],b=td[1];
        ll ans=su[1];
        if(b>a){
            ans=ans-a+b;
        }
        cout<<ans<<"\n";
    }
    return 0;
}