XOR UVALive - 8512 -区间线性基合并
题意 :给出一个包含n个元素的数组A以及一个k,接下来进行q次询问,每次询问给出 l 和 r ,
要你求出从A[l] , A[l+1] , A[l + 2],...,A[r]中任选出若干个数异或起来的值val,使得 k | val 最大,输出这个最大值。
思路 :既然是要使得k | val得到的值最大,那么val必然是k这个数上二进制位为0的位置为1的数,同时1的位数要尽可能的多。
这样我们就可以先对k取反,求出k二进制位为0的位数变成1的数p,再用A[i]与上p,将这些数放入线性基中。
由于每次都是区间查询,我们就可以利用线段树的思想,建立一棵结点为线性基的线段树,
每次区间查询的时候就查询出这几个区间合并后的线性基,再用线性基的性质查询最大值即可。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 12345
ll t,n,k,q,l,r,a[maxn],ans;
struct node
{
ll p[66];
void init()
{
memset(p,0,sizeof(p));
}
node()
{
memset(p,0,sizeof(p));
}
void add(ll x)
{
for(int i=60; i>=0; i--)
{
if(!(x&(1<<i)))continue;
if(!p[i])
{
p[i]=x;
break;
}
else x^=p[i];
}
}
node operator+(const node &b)const
{
node ret=b;
for(int i=60; i>=0; i--)
if(p[i])ret.add(p[i]);
return ret;
}
ll rp()
{
ll re=0;
for(int i=60; i>=0; i--)
if((re^p[i])>re)re^=p[i];
return re;
}
} tree[maxn*4];
void up(int root)
{
tree[root]=tree[root*2]+tree[root*2+1];
}
void bulid(int root,int l,int r)
{
tree[root].init();
if(l==r)
{
tree[root].add(a[l]);
return ;
}
int mid=(l+r)/2;
bulid(root*2,l,mid);
bulid(root*2+1,mid+1,r);
up(root);
}
node query(int root,int l,int r,int L,int R)
{
if(L<=l&&r<=R)
return tree[root];
int mid=(l+r)/2;
if(L>mid)return query(root*2+1,mid+1,r,L,R);
else if(R<=mid)return query(root*2,l,mid,L,R);
else return query(root*2,l,mid,L,R)+query(root*2+1,mid+1,r,L,R);
}
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld%lld",&n,&q,&k);
k=~k;
for(int i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
a[i]=(a[i]&k);
}
k=~k;
bulid(1,1,n);
while(q--)
{
ans=k;
scanf("%lld%lld",&l,&r);
node tp=query(1,1,n,l,r);
ans=(ans|tp.rp());
printf("%lld\n",ans);
}
}
return 0;
}
XOR UVALive - 8512 -区间线性基合并的更多相关文章
- 2017西安区域赛A / UVALive - 8512 线段树维护线性基合并
题意:给定\(a[1...n]\),\(Q\)次询问求\(A[L...R]\)的异或组合再或上\(K\)的最大值 本题是2017的西安区域赛A题,了解线性基之后你会发现这根本就是套路题.. 只要用线段 ...
- 【BZOJ-4568】幸运数字 树链剖分 + 线性基合并
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 238 Solved: 113[Submit][Status ...
- CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基
https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...
- 2017 ACM-ICPC Asia Xi'an Problem A XOR(异或线性基 )
题目链接 2017西安赛区 Problem A 题意 给定一个数列,和$q$个询问,每个询问中我们可以在区间$[L, R]$中选出一些数. 假设我们选出来的这个数列为$A[i_{1}]$, $A[ ...
- 【BZOJ-4269】再见Xor 高斯消元 + 线性基
4269: 再见Xor Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 131 Solved: 81[Submit][Status][Discuss] ...
- BZOJ 4269: 再见Xor [高斯消元 线性基]
4269: 再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 我太愚蠢了连数组开小了以及$2^{ ...
- 「洛谷3292」「BZOJ4568」「SCOI2016」幸运数字【倍增LCA+线性基+合并】
[bzoj数据下载地址]不要谢我 先讲一下窝是怎么错的... \(MLE\)是因为数组开小了.. 看到异或和最大,那么就会想到用线性基. 如果不会线性基的可以参考一下我的学习笔记:「线性基」学习笔记a ...
- Codeforces1101G (Zero XOR Subset)-less 【线性基】【贪心】
题目分析: 考虑到这是一个区间的异或问题,不妨求出前缀和,令$sum[i] = Xor_{j=1}^{i}a[j]$. 对于区间$[l,r]$的异或结果,等于$sum[r] \oplus sum[l- ...
- 【线性基合并 树链剖分】bzoj4568: [Scoi2016]幸运数字
板子题 Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个 幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市 ...
随机推荐
- Souvenir Shop 解题报告
Souvenir Shop 魔幻题目,这谁搞得到啊... 考场上完全sb了写了个线段树合并,想必我是个复杂度分析都没学过的入门级选手 发现这个网格图dag它的出度最多只有2 如果按照先走朝上的一条边进 ...
- Linux基本命令总结(七)
接上篇: 33,Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于 ...
- 分享4个运维平台工具OSSIM、Ansible的学习思路
对于当今企业安全来说,真正价值不在于亡羊补牢,也不在于一个或多个高危漏洞.企业在乎的是如何防患于未然,如何快速定位攻击,如何快速解决安全问题.OSSIM作为开源的安全信息管理平台,对于企业的需求来说毋 ...
- 深入剖析Kubernetes学习笔记:预习篇(01-04)
01 初出茅庐 1.PaaS 项目被大家接纳的一个主要原因? 就是它提供了一种名叫"应用托管". 2.像 Cloud Foundry 这样的 PaaS 项目,最核心的组件是? 一套 ...
- VUE-Windows系统下搭建vue环境
一.安装node.js(https://nodejs.org/en/) 下载完毕后,可以安装node,建议不要安装在系统盘(如C:).注意记下路径.. 此处默认安装这4项即可,点击Next按钮. ...
- 用Java编写第一个区块链
原文地址:https://www.cnblogs.com/zacky31/p/9057193.html 目标: 创建一个最基本的“区块链” 实现一个简单的挖矿系统 前提: 对面向对象编程有一定的基础 ...
- Python3:排序函数sort() 和 sorted() 之介绍
今天来讲一下Python中的排序函数.Python中有2个内建的排序函数,分别为sort() 和 sorted() 下面介绍分别介绍一下2个函数: 1.有一个列表 :a=[1,4,5,88,0,7], ...
- Houdini SDF/Raymarching/等高曲面绘制
1 , SDF <1> union min(a,b) <2> intersect: max(a,b) <3> Substract a-b : if(b> ...
- Django组件-分页器
Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here ...
- 2019春季训练02: JU Flash Contest Gym - 102035 训练报告与复盘
这场题极其简单 Solved 19 / 19 A Gym 102035A N integers 略 Solved 10 / 33 B Gym 102035B Mahmoud the Thief 用ma ...