题目链接

题意;给个数组,每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值

题解:线性基不知道的先看这个,一个线性基可以log的求最大值把对应去区间的线性基求出来然后用线段树维护线性基

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define maxn 100009
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
int read()
{char ch=' ';int ans=0;while(ch<'0' || ch>'9')ch=getchar();while(ch<='9' && ch>='0'){ans=ans*10+ch-'0';ch=getchar();}return ans;
}
struct ac{int a[50];void init(){memset(a,0,sizeof(a));}bool add(int x){for(int j=30;j>=0;j--){if(x&(1<<j)){if(!a[j]){a[j]=x;break;}x^=a[j];}}return x>0;}int query(){int x=0;for(int j=30;j>=0;j--){if((x^a[j])>x){x^=a[j];}}return x;}ac merge_LB(ac x){ac ret;for(int i=0;i<=30;i++){ret.a[i]=a[i];}for(int i=0;i<=30;i++){ret.add(x.a[i]);}return ret;}
}tre[maxn*10];
int b[maxn];
void build(int l,int r,int in){tre[in].init();if(l==r){tre[in].add(b[l]);return ;}int mid=(l+r)/2;build(l,mid,in*2);build(mid+1,r,in*2+1);tre[in]=tre[in*2].merge_LB(tre[in*2+1]);
}
ac query(int l,int r,int x,int y,int in){if(l==x&&r==y){return tre[in];}int mid=(x+y)/2;//ac ret;ret.init();if(r<=mid) return(query(l,r,x,mid,in*2));else if(l>mid)  return(query(l,r,mid+1,y,in*2+1));return query(l,mid,x,mid,in*2).merge_LB(query(mid+1,r,mid+1,y,in*2+1));
}
int main(){int t;cin>>t;while(t--){int n,m,k;//scanf("%d%d%d",&n,&m,&k);n=read();m=read();k=read();k=~k;for(int j=1;j<=n;j++){scanf("%d",&b[j]);b[j]&=k;}k=~k;build(1,n,1);for(int j=0;j<m;j++){int l,r;//scanf("%d%d",&l,&r);l=read();r=read();ac ans=query(l,r,1,n,1);int an=ans.query();an|=k;printf("%d\n",an);}}
}

转载于:https://www.cnblogs.com/DyLoder/p/9765801.html

ACM-ICPC 2017 Asia Xi'an A XOR (线性基+线段树思想)相关推荐

  1. HDU 3949 XOR 线性基

    http://acm.hdu.edu.cn/showproblem.php?pid=3949 求异或第k小,结论是第k小就是 k二进制的第i位为1就把i位的线性基异或上去. 但是这道题和上一道线性基不 ...

  2. BZOJ2115:[WC2011] Xor(线性基)

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  3. 2019牛客多校第四场 B xor (线性基求交)

    xor 思路 题目是要求[l,r][l, r][l,r]的所有集合是否都可以得到xxx,那么显然我们可以对这[l,r][l, r][l,r]个线性基求交,然后再特判能否xxx能否插入,如果能插入,显然 ...

  4. UVA1342 That Nice Euler Circuit(ACM - ICPC 2004 Asia - Shanghai)(计算几何、欧拉定理)

    整理的算法模板合集: ACM模板 欧拉定理:设平面图的顶点数.边数和面数分别为V,E,F,则V+F-E=2. #include<bits/stdc++.h> using namespace ...

  5. ACM/ICPC 2017 Nanning Regional 总结

    这是我的第一赛季的最后一场比赛,本来很不愿意写这个总结,但是想了想还是写吧. 先来说说比赛和南宁,这次去南宁就耗费了大量的时间在火车上,虽然到了第二天才开始热身赛,长途的奔波的确让我们几个感到身心疲惫 ...

  6. ACM ICPC 2017 Warmup Contest 2[菜鸡选手的成长]

    (队友去过节了 丢下我一个人单挑差点暴零,太菜了.....补题之路 路阻且长) A 算是水题吧,直接找两个随便割一下,画下图就好.... #include <bits/stdc++.h> ...

  7. BZOJ 2115 [Wc2011] Xor ——线性基

    [题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...

  8. 「 Luogu P2574 」 XOR的艺术——线段树

    # 解题思路 这题不难,但是原谅我一开始的傻逼想法,一会儿再给大家透露透露. 先说怎么做这题. 显然对于 $0$ 和 $1$ 来说,异或无非也就只有两种变化 异或了奇数次,$0$ 就会变成 $1$,$ ...

  9. 牛客第一场 H XOR —— 线性基

    题目链接:点我啊╭(╯^╰)╮ 题目大意: nnn 个数,求子集内所有数异或为 000 的所有子集大小之和 解题思路: 考虑每个值对答案的贡献     首先对 nnn 个数消一次元,得到 rrr 个基 ...

  10. 【HDU 3949】 XOR|线性基

    忘记把调试信息去掉 不是第一次犯这种情况啦.... #include <cstdio> #include <cstring> #include <iostream> ...

最新文章

  1. 使用php分页类实现简单分类
  2. (一)机器学习数据处理
  3. 全球及中国水产养殖和畜牧保险行业风险研究与“十四五”投资建议报告2021年版
  4. 启智社区亮相2020全球智博会,千万奖金悬赏优秀开发者
  5. Test SRM Level Two: CountExpressions, Brute Force
  6. 位运算(异或运算) :数组中数字出现的次数
  7. 司创电梯发卡软件_防复制电梯IC卡软件系统安装操作步骤
  8. dp线长什么样子_一根DP线引发的显示器超频事件
  9. 【项目实战】Python基于Apriori关联规则算法实现商品零售购物篮分析
  10. Drools4.0官方使用手册中文
  11. Linux的capability深入分析
  12. 快递柜储物柜锁控制板
  13. 什么是Hadoop以及Hadoop集群
  14. Linux系统管理----用户权限
  15. 它来了!Flutter3.0新特性全接触
  16. matlab语言及应用期末试卷,《MATLAB语言及应用》期末考试试题
  17. 小飞鱼 通达OA二次开发网络课程 系列视频课程在CSDN发布
  18. 158万张图像的鉴黄数据集
  19. 《数据安全法》发布后为什么数据保护官DPO变得炙手可热?
  20. 怎么判断文本框为空html,javascript如何判断输入框是否为空?

热门文章

  1. 使用scrapy-redis构建简单的分布式爬虫
  2. 关于操作系统I/O的一些基础知识
  3. php+getdomfromstring,php使用simple_html_dom解析HTML示例
  4. C++ const,static,inline
  5. Docker教程小白实操入门(5)--如何进入一个容器
  6. 基于Springboot的理财系统
  7. linux 移动压缩包 命令,文件的复制、移动、压缩等对SELinux属性关系详解
  8. 计算机秘密程序 听课反思,《编制计算机程序解决问题》的教学反思
  9. js排序的时间复杂度_javascript的array.indexOf的时间复杂度是多少?
  10. 动画效果之手机端实现垃圾桶效果