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位的线性基异或上去. 但是这道题和上一道线性基不 ...
随机推荐
- C#中App.config文件配置获取
最新的framework使用如下方法: using System.Configuration; ConfigurationManager.AppSettings["key"]; A ...
- VS2017 打包成exe
在项目的解决方案 右键→ 新建项目 后出现如下选择 (如果没有找到,请在联机中搜索 visual studio installer 并安装) 选择项目类型 Setup Project,并输入名称, ...
- JavaScript--轮播图_带计时器
轮播图效果: 实现的功能: 1.鼠标移入,左右按钮显示 2.右下叫小圆点鼠标移入,进入下一张图 3.左右按钮点击,右下小圆点页跟随变更 4.自动开启计时器,鼠标移入右下叫小圆点区,计时器停止,鼠标移出 ...
- laravel 项目本地版本为5.5,线上mysql 为5.7.21版本,执行严格模式
看到网上很多说修改 但是在mysql 5.7中没有这个参数设置,故放弃: 结合本项目sina_id 10位超过int的最大范围4294967295,所以报错,修改为bigint 即可.
- __defineGetter__和__defineSetter__在日期中的应用
日期函数每次取年月日都要调用Date的函数,有点麻烦,通过__defineGetter__可以处理一下,就能通过Date的实例对象直接获取年月日,例如 date.year获取日期对象date的年份.月 ...
- 防止chrome主页被篡改并设置为默认打开无痕浏览方式
1. 找到chrome的快捷方式, 右击打开属性 2. 将目标框内容改为以下内容chrome.exe的目录位置 // ----- 引号中的内容为"PATH\Chrome\Applicatio ...
- qt 自定义窗口绘制正弦曲线
circlewidget.h #ifndef CIRCLAWIDGET_H #define CIRCLAWIDGET_H #include <QFrame> #include<QVe ...
- 《C语言深度解剖》学习笔记之内存管理
第5章 内存管理 1.野指针 定义指针变量的同时最好初始化为NULL,用完指针后也将变量的值设置为NULL.也就是说除了使用时,别的时间都把它设置为NULL 2.堆,栈和静态区 堆:由malloc系列 ...
- Libev源码分析02:Libev中的IO监视器
一:代码流程 在Libev中,启动一个IO监视器,等待该监视器上的事件触发,然后调用该监视器的回调函数.整个的流程是这样的: 首先调用ev_default_loop初始化struct ev_loop ...
- Android的headerView和emptyView共存问题
今天做项目的时候,准备优化下ListView相关的东西,于是乎,需要做一个当列表无数据时,空的提醒页面.这个自然想到的是ListView的setEmptyView()方法,于是顺手就写了,可是,当我为 ...