二分WA求调
查看原帖
二分WA求调
763878
Jerry_heng楼主2024/3/12 09:08
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,siz[1000010],pos,t;
inline int read(){
	char ch=getchar();
	int x=0;
	while(ch<'0'||'9'<ch)ch=getchar();
	while('0'<=ch&&ch<='9'){
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	return x;
}
vector<int>v[1000010];
bool check(int p,int x,int y){
	int s1=upper_bound(v[x].begin(),v[x].begin()+siz[x],p)-v[x].begin();
	int s2=upper_bound(v[y].begin(),v[y].begin()+siz[y],p)-v[y].begin();
	return s1+s2>=pos;
}
signed main(){
	t=read();
	while(t--){
		n=read(),q=read();
		for(int i(1);i<=n;++i){
			siz[i]=read();
			for(int j(1);j<=siz[i];++j){
				int x;
				x=read();
				v[i].push_back(x);
			}
			sort(v[i].begin(),v[i].begin()+siz[i]);
		}
		while(q--){
			int x,y;
			x=read(),y=read();
			pos=(siz[x]+siz[y]);
			if(pos&1)pos=pos/2+1;
			else pos=pos/2;
			int l=min(v[x][max(0ll,siz[x]-pos-1)],v[y][max(0ll,siz[y]-pos-1)]),r=max(v[x][min(siz[x]-1,pos+1)],v[y][min(siz[y]-1,pos+1)]),ans;
			while(l<=r){
				int mid=(l+r)>>1;
				if(check(mid,x,y))ans=mid,r=mid-1;
				else l=mid+1;
			}
			printf("%lld\n",ans);
		}		
	}
	return 0;
} 
2024/3/12 09:08
加载中...