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