大根堆大红大紫0分
查看原帖
大根堆大红大紫0分
1011568
CodingFrog1楼主2024/7/9 15:46
#include<bits/stdc++.h>
#define int long long
using namespace std;
priority_queue<int> q1;
priority_queue<int> q2;
priority_queue<int> q3;
int pointer1=0,pointer2=0,pointer3=0;
bool b1,b2,b3;
void wh()
{
	b1=(!pointer1)&&(!pointer2)&&(pointer3==1);
	b2=(!pointer2)&&(!pointer3)&&(pointer1==1);
	b3=(!pointer3)&&(!pointer1)&&(pointer2==1);
	return;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	
	int n;
	cin>>n;
	int a;
	cin>>a;
	q1.push(a);
	pointer1++;
	for(int i=1;i<n;i++)
	{
		cin>>a;
		if(i%2)
		{
			q2.push(a);
			pointer1++;
		}
		else
		{
			q1.push(a);
			pointer2++;	
		}
		
	}
	wh();
	while(!(b1||b2||b3))
	{
		wh();
		if(b1||b2||b3)	break;
		while(!q1.empty()&&!q2.empty())
		{
			if(q1.top()==q2.top())
			{
				q1.pop();
				q2.pop();//消除 
				pointer1=--pointer2;
				wh();
				if(b1||b2||b3)	break;
			}
			else
			{
				q3.push(q1.top());
				q1.pop();//转移 
				pointer1--;
				pointer3++;
				wh();
				if(b1||b2||b3)	break;
			}
			if(q3.top()==q2.top())
			{
				q3.pop();
				q2.pop();//消除 
				pointer3=--pointer2;
				wh();
				if(b1||b2||b3)	break;
			}
			else
			{
				q1.push(q3.top());
				q3.pop();//转移 
				pointer3--;
				pointer1++;
				wh();
				if(b1||b2||b3)	break;
			}
			if(q1.top()==q3.top())
			{
				q1.pop();
				q3.pop();//消除 
				pointer1=--pointer3;
				wh();
				if(b1||b2||b3)	break;
			}
			else
			{
				q2.push(q1.top());
				q1.pop();//转移 
				pointer1--;
				pointer2++;
				wh();
				if(b1||b2||b3)	break;
			}
		}
	}
	if(b1)
	{
		cout<<q3.top();
		return 0;
	}
	if(b2)
	{
		cout<<q1.top();
		return 0;
	}
	else
	{
		cout<<q2.top();
		return 0;
	}
}

2024/7/9 15:46
加载中...