| 比赛 |
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;
}