75pts队列+优先队列求助
查看原帖
75pts队列+优先队列求助
220824
yyz1005楼主2023/9/7 14:17
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 200010;
ll sid,Q;
struct Node{
	ll hd,lt;
};
Node q[N];
ll head = 1,tail = 1;
priority_queue<ll> xa;
priority_queue<ll> xk;
void done(){
	while(!xa.empty()&&!xk.empty()&&xa.top()==xk.top()) xa.pop(),xk.pop();
}
int main(){
	scanf("%lld%lld",&sid,&Q);
	while(Q--){
		ll opt,x;
		scanf("%lld",&opt);
		if(opt==1){cin >> x;q[tail++] = (Node){1,x};xa.push(x);}
		else if(opt==2){
			cin >> x;
			while(x){
				if(x>=q[head].lt-q[head].hd+1){
					x-=(q[head].lt-q[head].hd+1);
					xk.push(q[head].lt);
					head++;
				} else {
					q[head].hd+=x;
					x = 0;
				}
			}
		} else if(opt==3){
			cin >> x;
			for(ll i = head; i < tail; i++){
				if(q[i].lt-q[i].hd+1<x) x-=(q[i].lt-q[i].hd+1);
				else {
					printf("%lld\n",q[i].hd+x-1);
					break;
				}
			}
		} else {
			done();
			printf("%lld\n",xa.top());
		}
	}
	return 0;
}

TLE5个

2023/9/7 14:17
加载中...