WA求调
查看原帖
WA求调
252549
Iwara楼主2024/3/23 16:09

RT

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN=1e6+5;
ll _,n,q;
struct node{
	ll l,r,mid_num;
}t[MAXN];
ll arr[MAXN],len,pos;
ll x,y;
ll L,R,mid,ans;
ll check(ll num){
	ll res=0;
	ll now_l=t[x].l,now_r=t[x].r;
	if(num>arr[now_r])res=now_r-now_l+1;
	else if(num<arr[now_l])res=0;
	else{
		ll qwq=lower_bound(arr+now_l,arr+now_r+1,num-1)-arr;
		res+=(qwq-now_l+1);
	}
	now_l=t[y].l,now_r=t[y].r;
	if(num>arr[now_r])res+=now_r-now_l+1;
	else if(num<arr[now_l])res+=0;
	else{
		ll qwq=lower_bound(arr+now_l,arr+now_r+1,num-1)-arr;
		res+=(qwq-now_l+1);
	}
	return res;
}
int main(){
	cin>>_;
	while(_--){
		cin>>n>>q;
		pos=1;
		for(int i=1;i<=n;i++){
			cin>>len;
			t[i].l=pos,t[i].r=pos+len-1;
			pos+=len;
			for(int j=t[i].l;j<=t[i].r;j++)cin>>arr[j];
		}
		for(int i=1;i<=n;i++)sort(arr+t[i].l,arr+t[i].r+1),t[i].mid_num=arr[t[i].l+(t[i].r-t[i].l+2)/2-1];
//		for(int i=1;i<=n;i++)cout<<t[i].mid_num<<" ";
//		cout<<endl;
		for(int i=1;i<=q;i++){
			cin>>x>>y;
			len=t[x].r-t[x].l+1+t[y].r-t[y].l+1;
			pos=(len+1)/2-1;
			L=min(t[x].mid_num,t[y].mid_num),R=max(t[x].mid_num,t[y].mid_num),ans=L;
			while(L<=R){
				mid=(L+R)>>1;
				if(check(mid)>pos)R=mid-1,ans=mid;
				else L=mid+1;
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}

不会二分/fn

2024/3/23 16:09
加载中...