| 比赛 |
2026.9.5 |
评测结果 |
AAAAAAAAAAAAAAA |
| 题目名称 |
Pretty Pens |
最终得分 |
100 |
| 用户昵称 |
默 |
运行时间 |
4.836 s |
| 代码语言 |
C++ |
内存使用 |
24.59 MiB |
| 提交时间 |
2026-09-05 09:09:41 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX (int)(1e18)
const int N=2e5+10;
int n,m,q;
int a[N],b[N];
multiset<int> s[N];
multiset<int> max2,maxx;
inline int read(){
int t=0,f=1;
register char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
return t*f;
}
int ans;
void update(int x,bool f){
if(s[x].size()>=2){
if(f) max2.insert(*prev(prev(s[x].end())));
else max2.erase(max2.find(*prev(prev(s[x].end()))));
}
if(s[x].size()>=1){
if(f) maxx.insert(*prev(s[x].end())),ans+=*prev(s[x].end());
else maxx.erase(maxx.find(*prev(s[x].end()))),ans-=*prev(s[x].end());
}
}
void update1(bool f){
if(max2.size()>=1){
if(f) maxx.insert(*prev(max2.end())),ans+=*prev(max2.end());
else maxx.erase(maxx.find(*prev(max2.end()))),ans-=*prev(max2.end());
}
}
void print(){
if(maxx.size()==m) cout<<ans<<"\n";
else cout<<ans-(*maxx.begin())<<"\n";
}
signed main(){
// freopen("s3.3-30.in","r",stdin);
freopen("Pens.in","r",stdin);
freopen("Pens.out","w",stdout);
n=read(),m=read(),q=read();
for(int i=1;i<=n;i++){
a[i]=read(),b[i]=read();
s[a[i]].insert(b[i]);
}
for(int i=1;i<=m;i++) update(i,1);
update1(1);print();
for(int i=1;i<=q;i++){
int op=read(),p=read(),x=read();
update1(0),update(a[p],0);
s[a[p]].erase(s[a[p]].find(b[p]));
update(a[p],1);
if(op==1) a[p]=x;
else b[p]=x;
update(a[p],0);
s[a[p]].insert(b[p]);update(a[p],1);
update1(1);
print();
}
return 0;
}