| 比赛 |
2026.9.5 |
评测结果 |
AAAAAAAAWAWTTTT |
| 题目名称 |
Pretty Pens |
最终得分 |
58 |
| 用户昵称 |
杨蕙宇 |
运行时间 |
13.908 s |
| 代码语言 |
C++ |
内存使用 |
16.20 MiB |
| 提交时间 |
2026-09-05 11:25:54 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
const ll INF=0x3f3f3f3f;
ll n,m,q;
struct node{
ll id,c,p;
};
vector<node>v;
bool cmp(node x,node y){
return x.p>y.p;
}
struct cmp2{
bool operator()(const node& x,const node& y)const{
return x.p<y.p;
}
};
ll tmp[N];
ll mk[N];
priority_queue<node,vector<node>,cmp2>s;
priority_queue<node,vector<node>,cmp2>r[N];
node b[N];
int 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;
if(q==0){
ll ans=0;
ll cnt=0;
bool f=0;
for(int i=1;i<=n;i++){
ll c,p;
cin>>c>>p;
v.push_back({i,c,p});
}
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();i++){
ll c=v[i].c;
ll p=v[i].p;
if(mk[c]&&f)continue;
else if(mk[c]&&(!f)){
f=1;
ans+=p;
cnt++;
}
else if(!mk[c]){
ans+=p;
mk[c]=1;
cnt++;
}
if(cnt>=m)break;
}
cout<<ans;
}
else if(m==1){
for(int i=1;i<=n;i++){
ll c,p;
cin>>c>>p;
s.push({i,c,p});
tmp[i]=p;
}
cout<<(s.top().p)<<"\n";
while(q--){
ll op,x,y;
cin>>op>>x>>y;
if(op==2){
tmp[x]=y;
s.push({x,1,y});
}
while(s.size()){
node f=s.top();
if(f.p!=tmp[f.id])s.pop();
else{
cout<<f.p<<"\n";
break;
}
}
}
}
else{
for(int i=1;i<=n;i++){
ll c,p;
cin>>c>>p;
b[i]={i,c,p};
r[c].push({i,c,p});
}
ll ans=0;
ll sum=0;
ll mn=INF;
ll mx=0;
for(int i=1;i<=m;i++){
node f1=r[i].top();
r[i].pop();
sum+=f1.p;
mn=min(mn,f1.p);
if(r[i].size()){
node f2=r[i].top();
mx=max(mx,f2.p);
}
r[i].push(f1);
}
if(mx>mn){
ans=(sum-mn+mx);
}
else ans=sum;
cout<<ans<<"\n";
while(q--){
ll op,x,y;
cin>>op>>x>>y;
if(op==1){
b[x].c=y;
r[y].push({x,y,b[x].p});
}
else{
b[x].p=y;
r[b[x].c].push({x,b[x].c,y});
}
ll ans=0;
ll sum=0;
ll mn=INF;
ll mx=0;
for(int i=1;i<=m;i++){
while(r[i].size()){
node f3=r[i].top();
if(f3.c!=b[f3.id].c||f3.p!=b[f3.id].p)r[i].pop();
else break;
}
node f1=r[i].top();
r[i].pop();
sum+=f1.p;
mn=min(mn,f1.p);
while(r[i].size()){
node f3=r[i].top();
if(f3.c!=b[f3.id].c||f3.p!=b[f3.id].p)r[i].pop();
else break;
}
if(r[i].size()){
node f2=r[i].top();
mx=max(mx,f2.p);
}
r[i].push(f1);
}
if(mx>mn){
ans=(sum-mn+mx);
}
else ans=sum;
cout<<ans<<"\n";
}
}
return 0;
}
/*
7 4 3
c p
1: 2 3
2: 1 2
3: 4 6
4: 3 1
5: 4 4
6: 4 2
7: 3 5
1 3 3
2 1 7
*/