比赛 2026.9.5 评测结果 AAAAAAAAAAAAAAA
题目名称 Pretty Pens 最终得分 100
用户昵称 rzzakioi 运行时间 2.817 s
代码语言 C++ 内存使用 21.82 MiB
提交时间 2026-09-05 09:36:02
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define inf 1e18
using namespace std;
int n,m,q,c[200005],p[200005],pos[200005],posclse[200005],posclfi[200005];
struct node{
    int x,id;
};
bool operator <(const node &x,const node &y){
    return x.x<y.x;
}
bool operator >(const node &x,const node &y){
    return x.x>y.x;
}
int cnt,cntclse,cntclfi,sum;
priority_queue<node>qpos[200005],qclse;
priority_queue<node,vector<node>,greater<node> >qclfi;
bool vis[400005],visclse[600005],visclfi[600005];
void clear(int x){
    while(!qpos[x].empty()&&vis[qpos[x].top().id])qpos[x].pop();
    if(qpos[x].empty())return;
    node num=qpos[x].top();
    qpos[x].pop();
    while(!qpos[x].empty()&&vis[qpos[x].top().id])qpos[x].pop();
    qpos[x].push(num);
}
void clearclse(){
    while(!qclse.empty()&&visclse[qclse.top().id])qclse.pop();
}
void clearclfi(){
    while(!qclfi.empty()&&visclfi[qclfi.top().id])qclfi.pop();
}
int getse(int x){
    if(qpos[x].size()<=1)return -inf;
    node fi=qpos[x].top();
    qpos[x].pop();
    node se=qpos[x].top();
    qpos[x].push(fi);
    return se.x;
}
int getfi(int x){
    if(qpos[x].empty())return inf;
    return qpos[x].top().x;
}
void solve(){
    int ans=sum,x1=-inf,x2=inf;
    if(!qclse.empty())x1=qclse.top().x;
    if(!qclfi.empty())x2=qclfi.top().x;
    ans=max(ans,ans+x1-x2);
    printf("%lld\n",ans);
}
signed main(){
    freopen("Pens.in","r",stdin);
    freopen("Pens.out","w",stdout);
    scanf("%lld%lld%lld",&n,&m,&q);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&c[i],&p[i]);
        qpos[c[i]].push({p[i],i});
        pos[i]=i;
    }
    for(int i=1;i<=m;i++){
        posclfi[i]=posclse[i]=i;
        qclse.push({getse(i),i});
        qclfi.push({getfi(i),i});
    }
    cnt=n;
    cntclfi=cntclse=m;
    for(int i=1;i<=m;i++){
        if(getfi(i)<inf)sum+=getfi(i);
    }
    solve();
    while(q--){
        int op,i,x;
        scanf("%lld%lld%lld",&op,&i,&x);
        if(op==2){
            int x1=getfi(c[i]);
            p[i]=x;
            vis[pos[i]]=1;
            pos[i]=++cnt;
            visclse[posclse[c[i]]]=1;
            posclse[c[i]]=++cntclse;
            visclfi[posclfi[c[i]]]=1;
            posclfi[c[i]]=++cntclfi;
            clear(c[i]);
            clearclse();
            clearclfi();
            qpos[c[i]].push({x,pos[i]});
            qclse.push({getse(c[i]),posclse[c[i]]});
            qclfi.push({getfi(c[i]),posclfi[c[i]]});
            int x2=getfi(c[i]);
            sum+=(x2-x1);
            solve();
        }
        else{
            int pre=c[i];
            int x1=getfi(c[i]),x3=getfi(x);
            c[i]=x;
            vis[pos[i]]=1;
            pos[i]=++cnt;
            visclse[posclse[c[i]]]=1;
            posclse[c[i]]=++cntclse;
            visclfi[posclfi[c[i]]]=1;
            posclfi[c[i]]=++cntclfi;
            visclse[posclse[pre]]=1;
            posclse[pre]=++cntclse;
            visclfi[posclfi[pre]]=1;
            posclfi[pre]=++cntclfi;
            clear(c[i]);clear(pre);
            clearclfi();
            clearclse();
            qpos[c[i]].push({p[i],pos[i]});
            qclse.push({getse(c[i]),posclse[c[i]]});
            qclse.push({getse(pre),posclse[pre]});
            qclfi.push({getfi(c[i]),posclfi[c[i]]});
            qclfi.push({getfi(pre),posclfi[pre]});
            int x2=getfi(pre),x4=getfi(x);
            sum+=(x2-x1)+(x4-x3);
            solve();
        }
    }
    return 0;
}