记录编号 324439 评测结果 AAAAAAAAAA
题目名称 [NOIP 2011]瑞士轮 最终得分 100
用户昵称 Gravatarrewine 是否通过 通过
代码语言 C++ 运行时间 1.580 s
提交时间 2016-10-18 08:52:40 内存使用 4.89 MiB
显示代码纯文本
#include <bits/stdc++.h>
 
using namespace std;
 
struct data{
	int f;
	int s;
	int b;
}a[200009];
 
bool comp(const data a,const data b)
{
	if(a.f==b.f){
	  return  a.b<b.b;
	}
	return a.f>b.f;
}
int n,t,r;
data a1[100009],a2[100009];
 
void msort()
{
	int b1=1,b2=1,c=1;
	while(b1<=n&&b2<=n)
	{
		if(a1[b1].f>a2[b2].f || (a1[b1].f==a2[b2].f&&a1[b1].b<a2[b2].b))
		{
		   	a[c]=a1[b1];
		   	c++; b1++;
	    }
	    else{
	    	a[c]=a2[b2];
	    	c++; b2++;
		}
	}
	while(b2<=n) {a[c]=a2[b2];c++;b2++;}
	while(b1<=n) {a[c]=a1[b1];c++;b1++;}
}
 
 
int main()
{
   freopen("swiss.in","r",stdin);
   freopen("swiss.out","w",stdout);
   ios::sync_with_stdio(false);
   cin>>n>>r>>t;
   for(int i=1;i<=n*2;i++)
      cin>>a[i].f;
   for(int i=1;i<=n*2;i++)
      cin>>a[i].s; 
   for(int i=1;i<=n+n;i++)
   	  a[i].b=i;
   sort(a+1,a+n+n+1,comp);
   for(int ii=1;ii<=r;ii++)
   {
   	  
   	  for(int i=1;i<=2*n;i+=2)
   	  {
   	  	 if(a[i].s>a[i+1].s)
   	  	 { 
			  a[i].f++; 
			  a1[(i+1)>>1]=a[i];
		      a2[(i+1)>>1]=a[i+1];	  
		 }
   	  	 else 
		 { 
		       a[i+1].f++;
		       a1[(i+1)>>1]=a[i+1];
		       a2[(i+1)>>1]=a[i];
	     }
      }
	  msort(); 
    }
   cout<<a[t].b;
   return 0; 
}