【题目描述】
UVALive - 8512XOR
【题目分析】
这种区间+线性基的问题我们可以考虑用线段树维护,线性基的合并的话就直接暴力合并
找到所在区间的线性基后再查找最大的数,我看网上的博客要说消除k的影响什么的,我觉得没有什么必要,直接将初值设置为k,然后从高位向低位找,如果异或了后值会变大就异或,觉得没有什么大问题。还有就是线段树维护的时候函数的返回值最好不要设置成线性基,会RE,具体的为什么我也不清楚。这道题的RE很玄学,我把读入数据改成longlong就会RE,T和u,v里面都一个不是longlong就不会RE,我提交了20多次才敢确定的确是因为这个原因导致RE,emmm,比较玄学
【AC代码】

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<climits>
#include<cstdlib>
#include<cmath>using namespace std;typedef long long ll;const int MAXN=10005;
int n,m,kk;
int a[MAXN];
struct L_B
{ll b[65],p[65];int cnt,flag;L_B(){memset(p,0,sizeof(p));memset(b,0,sizeof(b));cnt=flag=0;}void clear(){memset(p,0,sizeof(p));memset(b,0,sizeof(b));cnt=flag=0;}inline bool insert(ll x){for(int i=62;i>=0;--i)if(x&(1ll<<i)){if(b[i])x^=b[i];else{b[i]=x;return true;}}flag=1;return false;}ll get_max(){ll ret = 0;for(int i=62;i>=0;--i)if((ret^b[i])>ret)ret^=b[i];return ret;}ll get_max(ll initval){ll ret = initval;for(int i=62;i>=0;--i)if((ret^b[i])>ret)ret^=b[i];return ret;}ll get_min(){if(flag)return 0;for(int i=0;i<=62;++i)if(b[i])return b[i];return 0;}inline void rebuild(){for(int i=1;i<=62;++i)if(b[i])for(int j=0;j<i;++j)if(b[i]&(1ll<<j))b[i]^=b[j];for(int i=0;i<=62;++i)if(b[i])p[cnt++]=b[i];}ll kth(ll k){if(flag)--k;if(k==0)return 0;ll ret = 0;if(k>=(1ll<<cnt))return -1;for(int i=0;i<=cnt-1;++i)if(k&(1ll<<i))ret^=p[i];return ret;}
};
L_B A;
struct node
{L_B lis;
}tree[MAXN<<2];L_B merge(const L_B &n1,const L_B &n2)
{L_B ret = n1;for(int i = 0;i <= 62;++i)if(n2.b[i])ret.insert(n2.b[i]);ret.flag = n1.flag | n1.flag;return ret;
}void build(int k,int l,int r)
{if(l==r){tree[k].lis.insert(a[l]);return;}int mid=(l+r)>>1;build(k<<1,l,mid); build(k<<1|1,mid+1,r);tree[k].lis=merge(tree[k<<1].lis,tree[k<<1|1].lis);
}void query(ll k,ll l,ll r,ll L,ll R)
{if(l>=L && r<=R){A=merge(A,tree[k].lis);return;}int mid=(l+r)>>1;if(L<=mid) query(k<<1,l,mid,L,R);if(R>mid) query(k<<1|1,mid+1,r,L,R);return ;
}int main()
{ll T,u,v;scanf("%lld",&T);while(T--){scanf("%d%d%d",&n,&m,&kk);for(int i=1;i<=n;i++) scanf("%d",&a[i]);build(1,1,n);for(int i=0;i<m;i++){A.clear();scanf("%lld%lld",&u,&v);query(1,1,n,u,v);printf("%lld\n",A.get_max(kk));}}return 0;
}

UVALive - 8512——线段树维护线性基相关推荐

  1. P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)

    P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写, 但是这里变成了求任意个数的异或最大值.如果给定区间我们显然可以通过线性基来 ...

  2. 2017 ICPC西安区域赛 A - XOR ,线段树合并线性基

    题目链接:A - XOR 题意;给个数组,每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值 题解:线性基不知道的先看这个,一个线性基可以log的求最大值把对应去区间的线性基求出来然后 ...

  3. BZOJ.4184.shallot(线段树分治 线性基)

    BZOJ 裸的线段树分治+线性基,就是跑的巨慢_(:з」∠)_ . 不知道他们都写的什么=-= //41652kb 11920ms #include <map> #include < ...

  4. 2017年ICPC西安邀请赛A、XOR(线段树套线性基 + 思维)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目传送门 Problem 给你 nnn 和 nnn 个整数的数组 aaa,以及kkk和qqq,有 q ...

  5. 【BZOJ4184】shallot 线段树+vector+线性基

    [BZOJ4184]shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从 ...

  6. bzoj 4184 shallot 时间线建线段树+vector+线性基

    题目大意 n个时间点 每个时间点可以插入一个权值或删除一个权值 求每个时间点结束后异或最大值 分析 异或最大值用线性基 但是线性基并不支持删除操作 我们可以对时间线建一棵线段树 离线搞出每个权值出现的 ...

  7. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  8. 2017 ICPC西安区域赛 A - XOR (线段树并线性基)

    链接:https://nanti.jisuanke.com/t/A1607 题面: Consider an array AA with n elements . Each of its element ...

  9. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...

最新文章

  1. 远程SSH连接服务与基本排错
  2. 使用VS2005调试ASP程序
  3. java 访问线程_java线程简介(共享对数据的访问)
  4. silverlight 使用IValueConverter 转换
  5. 2016蓝桥杯省赛---java---B---3(凑算式)
  6. insert ignore duplicate key
  7. .net 使用RabbitMQ demo
  8. python中superclass是什么_Python中super()函数简介及用法分享
  9. 太难了,一个接口超时问题,从应用排查到内核....
  10. 一份最新的、全面的NLP文本分类综述
  11. 【珍藏】2020年AI、CV、NLP顶会最全时间表!
  12. 组合总和3 leetcode 216
  13. mysql批量修改表中大小写_SQL语句大小写是否区分的问题,批量修改整个数据库所有表所有字段大小写...
  14. JavaScript - 正则表达之二
  15. Origin复制图形格式
  16. 自制简单的诗歌搜索系统
  17. 移动硬盘数据错误循环冗余检查,要怎么恢复资料
  18. 记录一下unity3d资源加载Resources.Load资源加载的坑
  19. 如何使用PS将图片中的类千图网的字眼去掉
  20. 软件研发管理最佳实践(2012-10-20 深圳)

热门文章

  1. jackson - @JsonProperty的使用
  2. Redis配置文件配置
  3. angular2安装笔记
  4. javascript数据结构-栈
  5. mysql 中文乱码解决方法
  6. C:打印菱形(自己的方法)
  7. 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件...
  8. 对JSON的一点认识和理解以及JQuery处理JSON
  9. java采集温湿度水浸_机房水浸传感器:智能生活不可或缺的漏水传感器
  10. 大工20秋计算机组成原理在线作业2,大工14秋《计算机组成原理》在线作业2答案...