列表

详情


NC18979. 毒瘤xor

描述

小a有N个数a1, a2, ..., aN,给出q个询问,每次询问给出区间[L, R],现在请你找到一个数X,使得
1、
2、最大,表示异或操作(不懂的请自行百度)

输入描述

第一行一个整数N,表示序列的长度
第二行N个整数,表示序列内的元素
第三行一个整数q,表示询问的个数
接下来q行,每行两个整数[L, R],表示询问的区间

输出描述

输出q行,每行一个整数表示答案

若有多组可行解,请输出较小的解

示例1

输入:

5 
4 78 12 1 3
3
2 5
1 4
3 3

输出:

2147483632
2147483635
2147483635

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 375ms, 内存消耗: 14376K, 提交时间: 2023-07-31 18:51:59

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N][33]={0};
int main()
{
	int n,x,i,j,q,y,num=0;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>x;
		for(j=0;j<31;j++) a[i][j]=a[i-1][j]+((x>>j)&1);
	}
	cin>>q;
	while(q--)
	{
		num=0;
		cin>>x>>y;
		for(i=0;i<31;i++)
		if(2*(a[y][i]-a[x-1][i])<y-x+1)
		num+=pow(2,i);
		cout<<num<<endl;
	}
	return 0;
}

上一题