求助,线段树写挂了,第11个点WA
  • 板块CF1878E Iva & Pav
  • 楼主eb0ycn
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/24 12:56
  • 上次更新2024/1/24 15:59:25
查看原帖
求助,线段树写挂了,第11个点WA
536337
eb0ycn楼主2024/1/24 12:56
#include <bits/stdc++.h>
using namespace std;
int t,n,q,l,rl,rr,k,a[200001],xds[400001],rm,ans;
void build(int s,int t,int p)
{
	if(s==t)
	{
		xds[p]=a[s];
		return;
	}
	int m=s+t>>1;
	build(s,m,p<<1),build(m+1,t,(p<<1)|1);
	xds[p]=xds[p<<1]&xds[(p<<1)|1];
	return;
}
int cha(int s,int t,int p)//当前包含的区间 当前节点编号 
{
	if(l<=s&t<=rm)return xds[p];
	int m=s+t>>1,sum=a[l];
	if(l<=m)sum&=cha(s,m,p<<1);
	if(rm>m)sum&=cha(m+1,t,(p<<1)|1);
	return sum;
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		for(int i=1;i<=n;++i)scanf("%d",a+i);
		build(1,n,1);
		scanf("%d",&q);
		while(q--)
		{
			scanf("%d %d",&l,&k);
			rl=l,rr=n,ans=-1;
			while(rl<=rr)
			{
				rm=rl+rr>>1;
				if(cha(1,n,1)<k)rr=rm-1;
				else rl=rm+1,ans=rm;
			}
			printf("%d ",ans);
		}
		printf("\n");
	}
	return 0;
}
2024/1/24 12:56
加载中...