蒟蒻维护手写堆总出问题求调
查看原帖
蒟蒻维护手写堆总出问题求调
251775
galiyuebing楼主2023/3/15 20:43

rt

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAXN=2e5+10;
int n,m,s,cnt;
int a[MAXN],t[MAXN*2];

void push(int k)
{
	t[++cnt]=k;
	if(cnt==1)return;
	int i=cnt;
	while(i!=1 && t[i/2]>t[i])
	{
		swap(t[i/2],t[i]);
		i/=2;
	}
	if(i==1)i*=2;
	if(t[i+1]<t[i] && t[i+1]!=0 && t[i]!=0)swap(t[i],t[i+1]);
	return;
}

int main()
{
	cin>>m>>n;
	for(int i=1;i<=m;++i)scanf("%d",&a[i]);
	for(int i=1,cntt=0,sum=0;i<=n;++i)
	{
		scanf("%d",&s);
		for(;cntt<s;++cntt)
			push(a[cntt+1]);
		printf("%d\n",t[++sum]);
	}
	return 0;
}



2023/3/15 20:43
加载中...