题目链接  2017西安赛区 Problem A

题意  给定一个数列,和$q$个询问,每个询问中我们可以在区间$[L, R]$中选出一些数。

   假设我们选出来的这个数列为$A[i_{1}]$, $A[i_{2}]$, ..., $A[i_{t}]$

   求$K$ $or$ $($$A[i_{1}]$ $xor$ $A[i_{2}]$ ... $xor$ $A[i_{t}]$$)$的最大值

首先常规操作,每次在线段树上求出区间$[L, R]$代表的线性基。

然后把这个线性基中所有$K$的二进制表示为$1$的位全部削成$0$。

这样得到了新的不超过$30$个数,把新的这些数单独用一个线性基表示。

最后答案就是新的这个线性基中选出某些数能异或出来的最大值或上$K$的结果。

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define ls i << 1
#define rs i << 1 | 1
#define lson i << 1, L, mid
#define rson i << 1 | 1, mid + 1, R const int N = 1e4 + 10;
const int all = (1 << 27) - 1; int n, q, k;
int T;
int a[N], cnt; struct lb{
int d[30];
void clear(){
memset(d, 0, sizeof d);
cnt = 0;
}
bool ins(int val){
dec(i, 28, 0) if (val & (1 << i)){
if (!d[i]){ d[i] = val; break; }
val ^= d[i];
}
return val > 0;
}
int qmax(){
int ret = 0;
dec(i, 28, 0) if ((k | (ret ^ d[i])) > (k | ret)) ret ^= d[i];
return k | ret;
}
}; lb t[N << 3], c; lb merge(const lb &n1, const lb &n2){
lb ret = n1;
dec(i, 28, 0) if (n2.d[i]) ret.ins(n2.d[i]);
return ret;
} void build(int i, int L, int R){
if (L == R){
t[i].ins(a[L]);
return;
} int mid = (L + R) >> 1;
build(lson);
build(rson);
t[i] = merge(t[ls], t[rs]);
} lb query(int i, int L, int R, int l, int r){
if (L == l && R == r) return t[i];
int mid = (L + R) >> 1;
if (r <= mid) return query(lson, l, r);
else if (l > mid) return query(rson, l, r);
else return merge(query(lson, l, mid), query(rson, mid + 1, r));
} int main(){ scanf("%d", &T);
while (T--){
scanf("%d%d%d", &n, &q, &k);
rep(i, 0, 4e4) t[i].clear();
rep(i, 1, n) scanf("%d", a + i);
build(1, 1, n); while (q--){
int x, y;
scanf("%d%d", &x, &y);
lb now = query(1, 1, n, x, y);
cnt = all ^ k;
dec(i, 28, 0) now.d[i] &= cnt;
c.clear();
dec(i, 28, 0) if (now.d[i]) c.ins(now.d[i]);
printf("%d\n", c.qmax() | k);
}
} return 0;
}

  

2017 ACM-ICPC Asia Xi'an Problem A XOR(异或线性基 )的更多相关文章

  1. 2017 ACM ICPC Asia Regional - Daejeon

    2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...

  2. 2017 ACM/ICPC Asia Regional Shenyang Online spfa+最长路

    transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/1 ...

  3. 2017 ACM/ICPC Asia Regional Qingdao Online

    Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submi ...

  4. 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest

    2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest A - Arranging Wine 题目描述:有\(R\)个红箱和\(W\)个白箱,将这 ...

  5. 2017 ACM/ICPC Asia 南宁区 L The Heaviest Non-decreasing Subsequence Problem

    2017-09-24 20:15:22 writer:pprp 题目链接:https://nanti.jisuanke.com/t/17319 题意:给你一串数,给你一个处理方法,确定出这串数的权值, ...

  6. HDU - 6215 2017 ACM/ICPC Asia Regional Qingdao Online J - Brute Force Sorting

    Brute Force Sorting Time Limit: 1 Sec  Memory Limit: 128 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...

  7. 2017 ACM/ICPC Asia Regional Shenyang Online transaction transaction transaction

    Problem Description Kelukin is a businessman. Every day, he travels around cities to do some busines ...

  8. 2017 ACM/ICPC Asia Regional Shenyang Online cable cable cable

    Problem Description Connecting the display screen and signal sources which produce different color s ...

  9. 2017 ACM/ICPC Asia Regional Shenyang Online

    cable cable cable Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

随机推荐

  1. 玩转Linux之内存管理-free

    玩转Linux之内存管理-free free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之 ...

  2. 使用原生node写一个聊天室

    在学习node的时候都会练习做一个聊天室的项目,主要使用socket.io模块和http模块.这里我们使用更加原始的方式去写一个在命令行聊天的聊天室. http模块,socket.io都是高度封装之后 ...

  3. day02-python基础2

    操作 列表是用来存储一组数据,可以实现对列表中元素的增删改查等操作. 转换: list(string):把字符串转为列表 声明: 列表使用方括号 查询: 根据元素下标获取列表中元素的值 切片: [0: ...

  4. Hastable和Dictionary以及ArrayList和(List,LinkedList,数组)的区别

    Hastable和Dictionary的区别:(键值对) 1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分. 2:多线程程序中推荐使用 Hashtabl ...

  5. ImportError: dynamic module does not define module export function (PyInit__caffe)

    使用python3运行caffe,报了该错误. 参考网址:https://stackoverflow.com/questions/34295136/importerror-dynamic-module ...

  6. springboot07 mysql02

    多表关系 一.表关系介绍 1. 表之间为什么要有关系 一般来讲,通常都是一张表某一类型数据,比如学生数据存储在学生表,教师数据存储在教师表,学科数据存储在学科表.但是有时候我们需要表示一个学生属于哪一 ...

  7. QQ网页强制聊天,微博一键关注

    <!doctype html> <!-- 微博关注需要的js --> <html xmlns:wb="http://open.weibo.com/wb" ...

  8. web浏览器中的javascript -- 2

    在html里嵌入javascript: 在html文档里嵌入客户端javascript代码有4种方式: 1.内联,放置在<script>和</script>标签对之间; 2.放 ...

  9. 【Android】Android中期项目设计题目-界面设计小作业-提交截止时间2016.4.8

    评选三份作品,请发关于app运行界面截图的博客.

  10. java链接数据库--Mysql

    /************************************************************************* > File Name: Mysql.jav ...