考试订错3---2
#include<cstdio> #include<iostream> using namespace std; #define inf 1000000007 #define N 10000010 char xB[1<<15],*xS=xB,*xTT=xB; #define getc() (xS==xTT&&(xTT=(xS=xB)+fread(xB,1,1<<15,stdin),xS==xTT)?0:*xS++) #define isd(c) (c>='0'&&c<='9') inline int rd(){ char xchh; int xaa; while(xchh=getc(),!isd(xchh));(xaa=xchh-'0'); while(xchh=getc(),isd(xchh))xaa=xaa*10+xchh-'0';return xaa; } int n,m,a[N],b[N],q; void INIT() { n=rd();m=rd(); register int i; for(i=1;i<=n;++i) a[i]=rd(); for(i=1;i<=n;++i) b[i]=rd(); } int sol(int x)//询问分数---x排名 { int l=0,r=x,mid;//二分排名 if(x>n) l=x-n,r=n;//如果超过人数 while(l<=r) { mid=l+r>>1; int ta=a[mid],tb=b[x-mid];//将a[n+1]=b[n+1]=inf;样例数据体现 if(ta<tb) { if(a[mid+1]>tb) return tb; else l=mid+1; } else { if(ta<b[x-mid+1]) return ta; else r=mid-1; } } return max(a[mid],b[x-mid]); } int main() { freopen("queue.in","r",stdin); freopen("queue.out","w",stdout); INIT(); a[n+1]=b[n+1]=inf; while(m--) { q=rd(); printf("%d\n",sol(q)); } return 0; }