听灌多
  • 板块灌水区
  • 楼主DGL__DGL_AFO
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/12 19:24
  • 上次更新2024/4/12 20:44:35
查看原帖
听灌多
989997
DGL__DGL_AFO楼主2024/4/12 19:24

手写堆求调,玄关

P3378

记录详情

#include<bits/stdc++.h>
using namespace std;
long long x,n;
long long qn[1145140],cnt;
char op;
long long a,res,j;

int main()
{
	cin>>n;
	while(n--)
	{
		cin>>op;
		if(op=='1')
		{
			cnt++;
			cin>>qn[cnt];
			j=cnt;
			while(1)
			{
				if(qn[j]<qn[j>>1])
				{
					swap(qn[j],qn[j>>1]);
					j=j>>1;
				}
				else
				 break;
			}
		}
		else if(op=='2')
			cout<<qn[1]<<endl;
		else if(op=='3')
		{
			swap(qn[1],qn[cnt]);
			cnt--;
			res=1;
			if(qn[2]<=qn[3])
			  j=2;
			else
			  j=3;
			while(1)
			{
			  if(qn[res]<=qn[j]||j>cnt)
				    break;
				else if(qn[res]>qn[j])
				{
					swap(qn[res],qn[j]);
					res=j;
					if(qn[j<<1]<=qn[j<<1|1]&&qn[j<<1]<qn[j])
					  j=(j<<1);
					else if(qn[j<<1|1]<qn[j<<1|1]&&qn[j<<1|1]<qn[j])
					  j=(j<<1|1);  
							
				}
				 	  
			}	  
		}
		
		
		
	}
	
	
	
	return 0;
} 
2024/4/12 19:24
加载中...