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位的线性基异或上去. 但是这道题和上一道线性基不 ...
随机推荐
- php 获取客户端的ip、地理信息、浏览器信息、本地真实ip
转自:http://www.blhere.com/948.html 这是非常实用的php常用类.获取客户端的ip.地理信息.浏览器信息.本地真实ip 1234567891011121314151617 ...
- 【JZOJ4831】【NOIP2016提高A组集训第3场10.31】方程式
题目描述 数据范围 解法 枚举根之后,使用大除法. 代码 #include<stdio.h> #include<iostream> #include<string.h&g ...
- padas操作
1.从excel读取数据 pd.read_excel('naifen.xlsx') 2.保存为excel pd.to_excel('bb.xlsx') 3.统计某一列重复数据 df.groupby([ ...
- GCD使用经验与技巧浅谈
前言 GCD(Grand Central Dispatch)可以说是Mac.iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧. dispatch_once_t必须是全局或stati ...
- hdu 3652 【数位dp】
hdu 3652 题意:求1到n中包含'13'('13'不一定连续)且能被13整除的数的个数. 这是我第一道比较了能看懂的数位dp.定义状态dp[pos][res][sta]表示处理到第pos位,模的 ...
- SDUT-2116_数据结构实验之链表一:顺序建立链表
数据结构实验之链表一:顺序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入N个整数,按照输入的顺序建立单链 ...
- @NOIP2018 - D2T1@ 旅行
目录 @题目描述@ @题解@ @代码@ @题目描述@ 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 n 个城市之间有 m 条双向道路.每条双向道路 ...
- oracle函数 INSTR(C1,C2[,I[,J]])
[功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; [说明]多字节符(汉字.全角符等),按1个字符计算 [参数] C1 被搜索的字符串 C2 希望搜索的字符串 I 搜 ...
- oracle避免在索引列上使用计算
WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 举例: 低效: SELECT … FROM DEPT WHERE SAL * 12 > 25000; 高效: SE ...
- hadoop2.6.0 + hbase-1.0.0 伪分布配置
1 基本配置 主机名: 192.168.145.154 hadoop2 ======= 2 etc/hadoop下文件配置 1)core-site.xml <configuration> ...