hdu 6579 Operation (在线线性基)
•题意
一个数组a有n个数 m个操作
操作① 询问$[l,r]$区间的异或值
操作② 在数组末尾追加一个数x,数组长度变为$n+1$
其中$l,r$不直接给出,其中$l=l%n+1,r=r%n+1$
其中$x=x^lastans$($lastens$为上一次询问的答案)
•思路
强制在线的线性基,
在线线性基就是在离线的基础上多开一维
具体思路跟CF1100F的在线做法一样,戳这里
记得处理一下$l,r,x$
•代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e6+;
int a[maxn];
int p[maxn][],base[maxn][];
int n,q;
int last; void Insert(int k,int x,int pos)
{
for(int i=;i>=;i--)
{
if(x&(<<i))
{
if(!base[k][i])
{
base[k][i]=x;
p[k][i]=pos;
return ;
}
else if(pos>p[k][i])
{
swap(base[k][i],x);
swap(p[k][i],pos);
}
x^=base[k][i];
}
}
} int getMax(int l,int r)
{
int ans=;
for(int i=;i>=;i--)
if(p[r][i]>=l)
ans=max(ans,ans^base[r][i]); return ans;
} void Solve()
{
for(int i=;i<=n;i++)
{
memcpy(p[i],p[i-],sizeof(p[i-]));
memcpy(base[i],base[i-],sizeof(base[i-])); Insert(i,a[i],i);
} while(q--)
{
int op;
scanf("%d",&op);
if(op==)
{
int l,r;
scanf("%d%d",&l,&r);
l=(l^last)%n+,r=(r^last)%n+;
if(l>r)
swap(l,r);
last=getMax(l,r);
printf("%d\n",last);
}
else
{
n++;
scanf("%d",&a[n]);
memcpy(p[n],p[n-],sizeof(p[n-]));
memcpy(base[n],base[n-],sizeof(base[n-])); Insert(n,a[n]^last,n);
}
}
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
last=;
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)
scanf("%d",a+i); Solve();
}
}
hdu 6579 Operation (在线线性基)的更多相关文章
- 杭电多校HDU 6579 Operation (线性基 区间最大)题解
题意: 强制在线,求\(LR\)区间最大子集异或和 思路: 求线性基的时候,记录一个\(pos[i]\)表示某个\(d[i]\)是在某个位置更新进入的.如果插入时\(d[i]\)的\(pos[i]\) ...
- HDU 3949 XOR (线性基第k小)题解
题意: 给出\(n\)个数,求出子集异或第\(k\)小的值,不存在输出-1. 思路: 先用线性基存所有的子集,然后对线性基每一位进行消元,保证只有\(d[i]\)的\(i\)位存在1,那么这样变成了一 ...
- 2019年杭电多校第一场 1002题Operation(HDU6579+线性基)
题目链接 传送门 题意 初始时有\(n\)个数,现在有\(q\)次操作: 查询\([l,r]\)内选择一些数使得异或和最大: 在末尾加入一个数. 题目强制在线. 思路 对于\(i\)我们记录\([1, ...
- 【HDOJ6579】Operation(线性基)
题意:给定一个数列a,给定两种操作: 1.询问[l,r]区间内最大的xor和 2.n++,a[n]赋值为x 要求强制在线 n,m<=5e5,a[i]<2^30 思路:同CF1100F 固定 ...
- [2019杭电多校第一场][hdu6579]Operation(线性基)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题目大意是两个操作,1个是求[l,r]区间子序列的最大异或和,另一个是在最后面添加一个数. 如果 ...
- (线性基)Operation
http://acm.hdu.edu.cn/showproblem.php?pid=6579 线性基https://blog.csdn.net/a_forever_dream/article/deta ...
- hdu 3949 XOR (线性基)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意: 给出n个数,从中任意取几个数字异或,求第k小的异或和 思路: 线性基求第k小异或和,因为题 ...
- CodeForces - 1100F:Ivan and Burgers (线性基&贪心)(离线 在线)
题意:给定N个数,Q次询问,求区间最大异或和. 思路:一开始想的线性基+线段树.单次线性基合并的复杂度为20*20,结合线段树,复杂度为O(NlogN*20*20):显然,超时. 超时代码: #inc ...
- HDU 3949 XOR 线性基
http://acm.hdu.edu.cn/showproblem.php?pid=3949 求异或第k小,结论是第k小就是 k二进制的第i位为1就把i位的线性基异或上去. 但是这道题和上一道线性基不 ...
随机推荐
- oracle dbms_repcat_admin能带来什么安全隐患
如果一个用户能执行dbms_repcat_admin包,将获得极大的系统权限. 以下情况可能获得该包的执行权限: 1.在sys下grant execute on dbms_repcat_admin t ...
- PHP验证码文件类
转自:http://www.blhere.com/1165.html 12345678910111213141516171819202122232425262728293031323334353637 ...
- Oracle函数——MINUS
解释 “minus”直接翻译为中文是“减”的意思,在Oracle中也是用来做减法操作的,只不过它不是传统意义上对数字的减法,而是对查询结果集的减法.A minus B就意味着将结果集A去除结果集B中所 ...
- 批量或者选择导出datagrid列表数据到表格
//导出项目信息 function exportXmxx(){ //判断是否选择站址 var index = $("#dgObj").datagrid('getChecked'); ...
- 远程控制工具&&驱动安装仍然没有声音
1. 2.下面是一个远程控制工具 TeamViewer
- POJ-3615_Cow Hurdles
Cow Hurdles Time Limit: 1000MS Memory Limit: 65536K Description Farmer John wants the cows to prepar ...
- CI框架下 新浪微博登录接口完整版
https://www.cnblogs.com/yznyzcw/p/3756622.html#top 说明:本贴只适合CI框架.功能实现:登录接口跳转链接成功,获取用户信息(包括最重要的u_id)成功 ...
- sublime简介
Sublime Text是一个代码编辑器.也是HTML和散文先进的文本编辑器.漂亮的用户界面和非凡的功能,例如:多选择,Python插件,代码段等等.完全可自定义键绑定,菜单和工具栏等等.漂亮的用户界 ...
- vue4——把输入框的内容添加到页面(简单留言板)
文章地址:https://www.cnblogs.com/sandraryan/ vue最最最简单的demo(记得引入) 实例化一个vue,绑定#app的元素,要渲染的数组arr作为data. 把ar ...
- 全面理解Python中的类型提示(Type Hints)
众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...