| 比赛 |
2026.9.5 |
评测结果 |
AAAAAAAAAAAAAAA |
| 题目名称 |
Pretty Pens |
最终得分 |
100 |
| 用户昵称 |
ChenBp |
运行时间 |
3.173 s |
| 代码语言 |
C++ |
内存使用 |
25.32 MiB |
| 提交时间 |
2026-09-05 10:36:21 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<utility>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
const int N=2e5+5,INF=0x3f3f3f3f;
priority_queue<pii>q1[N],q2[N];
priority_queue<pii>nc1,nc2,ch1,ch2;
int c[N],p[N];
bool cho[N];
int maxx[N];
ll sum=0;
inline void syc(priority_queue<pii>& al,priority_queue<pii>& de) {
while(!al.empty()&&!de.empty()&&al.top()==de.top()) {
al.pop();
de.pop();
}
}
inline void xu(int i,bool b) {
if(b) {
sum-=p[maxx[i]];
cho[maxx[i]]=0;
ch2.emplace(-p[maxx[i]],maxx[i]);
// cout<<"ch2 "<<-p[maxx[i]]<<" "<<maxx[i]<<"\n";
nc1.emplace(p[maxx[i]],maxx[i]);
// cout<<"nc1 "<<-p[maxx[i]]<<" "<<maxx[i]<<"\n";
}
syc(q1[i],q2[i]);
syc(ch1,ch2);
pii x=q1[i].top();
ch1.emplace(-x.first,x.second);
// cout<<"ch1 "<<-x.first<<" "<<x.second<<"\n";
nc2.emplace(x.first,x.second);
// cout<<"nc2 "<<x.first<<" "<<x.second<<"\n";
sum+=x.first;
cho[x.second]=1;
maxx[i]=x.second;
}
int main() {
freopen("Pens.in","r",stdin);
freopen("Pens.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n,m,q;
cin>>n>>m>>q;
for(int i=1; i<=n; i++) {
cin>>c[i]>>p[i];
q1[c[i]].emplace(p[i],i);
// cout<<"q1["<<c[i]<<"] "<<p[i]<<" "<<i<<"\n";
}
for(int i=1; i<=n; i++) {
nc1.emplace(p[i],i);
// cout<<"nc1 "<<p[i]<<" "<<i<<"\n";
}
for(int i=1; i<=m; i++) {
xu(i,0);
// cout<<x.first<<" "<<x.second<<"\n";
}
// for(int j=1;j<=n;j++) cout<<cho[j]<<" \n"[j==n];
// cout<<sum<<" "<<(nc1.empty()?-1:(nc1.top().first))<<" "<<(nc1.empty()?-1:(nc1.top().second))<<"\n";
syc(nc1,nc2);
cout<<sum+max(0,(nc1.empty()?0:(nc1.top().first+ch1.top().first)))<<"\n";
while(q--) {
int op,i,x;
cin>>op>>i>>x;
if(op==1) {
q2[c[i]].emplace(p[i],i);
// cout<<"q2["<<c[i]<<"] "<<p[i]<<" "<<i<<"\n";
if(cho[i]) {
sum-=p[i];
cho[i]=0;
ch2.emplace(-p[i],i);
// cout<<"ch2 "<<-p[i]<<" "<<i<<"\n";
nc1.emplace(p[i],i);
// cout<<"nc1 "<<p[i]<<" "<<i<<"\n";
xu(c[i],0);
}
c[i]=x;
q1[c[i]].emplace(p[i],i);
// cout<<"q1["<<c[i]<<"] "<<p[i]<<" "<<i<<"\n";
xu(c[i],1);
} else {
q2[c[i]].emplace(p[i],i);
// cout<<"q2["<<c[i]<<"] "<<p[i]<<" "<<i<<"\n";
if(cho[i]) {
sum-=p[i];
cho[i]=0;
ch2.emplace(-p[i],i);
// cout<<"ch2 "<<-p[i]<<" "<<i<<"\n";
p[i]=x;
q1[c[i]].emplace(p[i],i);
// cout<<"q1["<<c[i]<<"] "<<p[i]<<" "<<i<<"\n";
nc1.emplace(p[i],i);
// cout<<"nc1 "<<p[i]<<" "<<i<<"\n";
xu(c[i],0);
}else{
nc2.emplace(p[i],i);
// cout<<"nc2 "<<p[i]<<" "<<i<<"\n";
p[i]=x;
q1[c[i]].emplace(p[i],i);
// cout<<"q1["<<c[i]<<"] "<<p[i]<<" "<<i<<"\n";
nc1.emplace(p[i],i);
// cout<<"nc1 "<<p[i]<<" "<<i<<"\n";
xu(c[i],1);
}
}
syc(nc1,nc2);
// for(int j=1;j<=n;j++) cout<<cho[j]<<" \n"[j==n];
// cout<<(nc1.empty()?-1:(nc1.top().first))<<" "<<(nc1.empty()?-1:(nc1.top().second))<<"\n";
// cout<<(nc2.empty()?-1:(nc2.top().first))<<" "<<(nc2.empty()?-1:(nc2.top().second))<<"\n";
// cout<<sum<<" "<<"\n";
cout<<sum+max(0,(nc1.empty()?-1:(nc1.top().first+ch1.top().first)))<<"\n";
}
return 0;
}