10分求助(玄关)
查看原帖
10分求助(玄关)
1199534
ycy1124楼主2024/3/11 13:09
#include<bits/stdc++.h>
using namespace std;
struct csxs
{
	long long sl,fs,bh;
}xs[210000],xs1[105000],xs2[105000];
bool cmp(csxs a1,csxs a2)
{
	if(a1.sl==a2.sl)
		return a1.bh<a2.bh;
	return a1.sl>a2.sl;
}
int main()
{
	int n,r,q;
	scanf("%d%d%d",&n,&r,&q);
	for(int i=1;i<=n*2;i++)
	{
		scanf("%lld",&xs[i].fs);
	}
	for(int i=1;i<=n*2;i++)
	{
		scanf("%lld",&xs[i].sl);
		xs[i].bh=i;
	}
	sort(xs+1,xs+2*n+1,cmp);
	for(int i=1;i<=r;i++)
	{
		for(int i=1;i<=2*n;i+=2)
		{
			if(xs[i].sl>xs[i+1].sl)
			{
				xs[i].fs++;
				xs1[(i+1)/2]=xs[i];
				xs2[(i+1)/2]=xs[i+1];
			}
			else
			{
				xs[i+1].fs++;
				xs1[(i+1)/2]=xs[i+1];
				xs2[(i+1)/2]=xs[i];
			}
		}
		int x1=1,x2=1;
		while(x1<=n||x2<=n)
		{
			if(x1>n)
			{
				while(x2<=n)
				{
					xs[x1+x2-1]=xs2[x2];
					x2++;
				}
			}
			else if(x2>n)
			{
				while(x1<=n)
				{
					xs[x1+x2-1]=xs1[x1];
					x1++;
				}
			}
			else if(xs1[x1].fs>xs2[x2].fs)
			{
				xs[x1+x2-1]=xs1[x1];
				x1++;
			}
			else if(xs1[x1].fs==xs2[x2].fs&&xs1[x1].bh<xs2[x2].bh)
			{
				xs[x1+x2-1]=xs1[x1];
				x1++;
			}
			else
			{
				xs[x1+x2-1]=xs2[x2];
				x2++;
			}
		}
	}
	/*
	for(int i=1;i<=2*n;i++)
	{
		cout<<xs[i].bh<<' ';
	}
	*/
	cout<<xs[q].bh;
	return 0;
}
2024/3/11 13:09
加载中...