众所周知STL的priority_queue时间复杂度是logn
然后我用这个来代替排序
然后。。。超大时了
求神仙斧正,代码极短,一下就看完了
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int s[N];
int n,r,Q;
struct node{
int p,num,v;
bool operator <(const node &x) const
{
if(x.p==p) return x.num<num;
else return p<x.p;
}
};
priority_queue<node> a;
inline int read()
{
int x=0;
bool w=0;
char c=getchar();
while(!isdigit(c))
w|=c=='-',c=getchar();
while(isdigit(c))
x=(x<<1)+(x<<3)+(c^48),c=getchar();
return w?-x:x;
}
int main()
{
freopen("swiss.in","r",stdin);
freopen("swiss.out","w",stdout);
n=read(),r=read(),Q=read();
for(register int i=1;i<=n<<1;++i) s[i]=read();
for(register int i=1;i<=n<<1;++i)
{
int x=read();
// cout<<s[i]<<' '<<i<<' '<<x<<endl;
a.push((node){s[i],i,x});
}
while(r--)
{
priority_queue<node> q=a;
while(!a.empty()) a.pop();
for(register int i=1;i<=n;++i)
{
int num1=q.top().num,v1=q.top().v,p1=q.top().p;q.pop();
int num2=q.top().num,v2=q.top().v,p2=q.top().p;q.pop();
if(v1>v2) ++p1;
else ++p2;
a.push((node){p1,num1,v1});
a.push((node){p2,num2,v2});
// cout<<num1<<' '<<v1<<' '<<p1<<endl;
// cout<<num2<<' '<<v2<<' '<<p2<<endl;
}
}
for(register int i=1;i<Q;++i) a.pop();
printf("%d\n",a.top().num);
return 0;
}