P1801对顶堆求调
  • 板块P1801 黑匣子
  • 楼主douweiqi
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/9 20:32
  • 上次更新2024/3/9 20:35:26
查看原帖
P1801对顶堆求调
540956
douweiqi楼主2024/3/9 20:32

RT

//保持que1.size()==uu
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int N=1e6+10;
const int M=1e3+10;
priority_queue<long long> que1;
priority_queue<long long,vector<long long>,greater<long long> > que2;
//que1    que2
long long n,m;
long long a[N];
long long u[N];
void init(){
	scanf("%lld%lld",&m,&n);
	for(long long i=1;i<=m;i++){
		scanf("%lld",&a[i]);
	}
	for(long long i=1;i<=n;i++){
		scanf("%lld",&u[i]);
	} 
}
//
//
int main(){
	init();
	long long uu=1;
	for(long long i=1;i<=m;i++){
		que1.push(a[i]);
		if(que1.size()>uu){
			que2.push(que1.top());
			que1.pop();
		} 
		if(u[uu]==i){
			while(u[uu]==i){
				printf("%lld\n",que1.top());
				uu++;
				if(u[uu]==i){
					if(que1.size()<uu){
						que1.push(que2.top());
						que2.pop();
					}
				}
			}
		}
	}
	return 0;
} 
2024/3/9 20:32
加载中...