离奇RE,求调
查看原帖
离奇RE,求调
1041101
Aventurine_stone楼主2024/3/13 17:38
#include<bits/stdc++.h>
using namespace std;
const int N=1000010,M=1010;
inline long long read()
{
	long long x=0;
	char c=getchar();
	while(c<'0'||c>'9')
		c=getchar();
	while(c>='0'&&c<='9')
	{
		x=(x<<3)+(x<<1)+c-'0';
		c=getchar();
	}
	return x;
}
inline void write(long long x)
{
	if(x>9)
		write(x/10);
	putchar(x%10+'0');
}
inline void swap(int &x,int &y)
{
	x^=y^=x^=y;
}
int T,n,m;
long long a[N],ls[N];
int len,idx;
int l[N],r[N],size[N];
int v[N],cnt[M],fa[N];
int sq;
inline void add(int x)
{
	v[x]++;
	cnt[fa[x]]++;
}
inline void del(int x)
{
	v[x]--;
	cnt[fa[x]]--;
}
int kk;
int lk[M],rk[M];
void build(int ll,int rr)
{
	kk++;
	lk[kk]=ll,rk[kk]=rr;
	for(int i=ll;i<=rr;i++)
		fa[i]=kk;
	if(rr==len)
		return ;
	build(ll+sq,min(rr+sq,len));
}
struct Q{
	int idx,x,y,maxx;
}q[N];
inline bool cmp(Q a1,Q a2)
{
	return a1.maxx>a2.maxx;
}
long long ans[N];
bool pd[3][3];
inline void pan(int i)
{
	q[i-1].x==q[i].x?pd[1][1]=1:1;
	q[i-1].x==q[i].y?pd[1][2]=1:1;
	q[i-1].y==q[i].x?pd[2][1]=1:1;
	q[i-1].y==q[i].y?pd[2][2]=1:1;
}
inline void qing()
{
	pd[1][1]=0;
	pd[1][2]=0;
	pd[2][1]=0;
	pd[2][2]=0;
}
int x;
void change(int i)
{
	if(!pd[1][1]&&!pd[1][2])
	{
		x=q[i-1].x;
		for(int j=l[x];j<=r[x];j++)
			del(a[j]);
	}
	if(!pd[2][1]&&!pd[2][2])
	{
		x=q[i-1].y;
		for(int j=l[x];j<=r[x];j++)
			del(a[j]);
	}
	if(!pd[1][1]&&!pd[2][1])
	{
		x=q[i].x;
		for(int j=l[x];j<=r[x];j++)
			add(a[j]);
	}
	if(!pd[1][2]&&!pd[2][2])
	{
		x=q[i].y;
		for(int j=l[x];j<=r[x];j++)
			add(a[j]);
	}
}
int t,b;
void ask(int idx)
{
	for(int i=1;i<=kk;i++)
	{
		if(t>cnt[i])
		{
			t-=cnt[i];
		}
		else
		{
			b=i;
			break;
		}
	}
	for(int i=lk[b];i<=rk[b];i++)
	{
		if(t>v[i])
			t-=v[i];
		else
		{
			ans[idx]=ls[i];
			return ;
		}
	}
}
int main()
{
	r[0]=-1;
	T=read();
	while(T--)
	{
		n=read(),m=read();
		len=0;
		for(int i=1;i<=n;i++)
		{
			l[i]=r[i-1]+1;
			r[i]=read();
			size[i]=r[i];
			r[i]+=r[i-1];
			for(int j=l[i];j<=r[i];j++)
				a[j]=read(),ls[++len]=a[j];
		}
		idx=len;
		sort(ls+1,ls+idx+1);
		idx=unique(ls+1,ls+idx+1)-ls-1;
		for(int i=1;i<=len;i++)
			a[i]=lower_bound(ls+1,ls+idx+1,a[i])-ls;
		for(int i=1;i<=m;i++)
		{
			q[i].idx=i;
			q[i].x=read(),q[i].y=read();
			if(size[q[i].x]<size[q[i].y])
				swap(q[i].x,q[i].y);
			q[i].maxx=size[q[i].x];
		}
		sort(q+1,q+m+1,cmp);
		sq=sqrt(idx);
		build(1,sq);
		for(int i=1;i<=m;i++)
		{
			pan(i);
			change(i);
			t=size[q[i].x]+size[q[i].y];
			t=ceil(t*1.0/2);
			ask(q[i].idx);
			qing();
		}
		for(int i=1;i<=m;i++)
			write(ans[i]),putchar(10);
		x=q[m].x;
		for(int i=l[x];i<=r[x];i++)
			del(a[i]);
		x=q[m].y;
		for(int i=l[x];i<=r[x];i++)
			del(a[i]);
	}
	return 0;
}

记录

2024/3/13 17:38
加载中...