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