题意:

强制在线,求\(LR\)区间最大子集异或和

思路:

求线性基的时候,记录一个\(pos[i]\)表示某个\(d[i]\)是在某个位置更新进入的。如果插入时\(d[i]\)的\(pos[i]\)小于我当前插入的\(pos[r]\),那么就用当前插入的数换出原来的\(d[i]\),继续进行插入并更新\(pos\),这样就能保证所有的异或和都没有丢失。这样我们只要每次保存出所有\(dn[r][maxn]\)表示最右边为\(r\)时的线性基就可以直接求出所有区间\([L,R]\),\(1 <= L <= R <= r\)。只需要满足\(pos[i] >= L\),当前找的线性基就是可以使用的线性基。

参考:

线性基 详细整理

代码:

#include<map>
#include<set>
#include<cmath>
#include<cstdio>
#include<stack>
#include<vector>
#include<queue>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = 1e6 + 5;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;
struct Liner_Basis{int d[32], nd[maxn][32];int pos[32], npos[maxn][32];int tot;void init(){memset(d, 0, sizeof(d));tot = 0;}void insert(int x, int r){int R = r;for(int i = 31; i >= 0; i--){if(x & (1LL << i)){if(!d[i]){d[i] = x;pos[i] = r;break;}else if(pos[i] < r){    //把贡献早的换出swap(pos[i], r);swap(d[i], x);}x ^= d[i];  //原来的继续去贡献低位}}for(int i = 31; i >= 0; i--){  //保存当前线性基nd[R][i] = d[i];npos[R][i] = pos[i];}}int getMax(int l, int r){int ret = 0;for(int i = 31; i >= 0; i--){if(npos[r][i] >= l){ret = max(ret, ret ^ nd[r][i]);}}return ret;}}lb;
int main(){int n, m;int T;scanf("%d", &T);while(T--){scanf("%d%d", &n, &m);lb.init();for(int i = 1; i <= n; i++){int c;scanf("%d", &c);lb.insert(c, i);}int last = 0;while(m--){int op, l, r;scanf("%d", &op);if(op == 0){scanf("%d%d", &l, &r);l = (l ^ last) % n + 1;r = (r ^ last) % n + 1;if(l > r) swap(l, r);last = lb.getMax(l, r);printf("%d\n", last);}else{scanf("%d", &l);l = l ^ last;lb.insert(l, ++n);}}}return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/11248546.html

杭电多校HDU 6579 Operation (线性基 区间最大)题解相关推荐

  1. 【2019杭电多校训练赛】HDU6681 / 1002-Rikka with Cake 题解(扫描线)

    [2019杭电多校训练赛]HDU6681 / 1002-Rikka with Cake 题解 题意 思路 代码 题目来自于:HDU6681 Rikka with Cake 题意 题目的大意是给定你一个 ...

  2. 2019杭电多校第一场 Operation HDU - 6579

    题意:给出一个序列,两种操作,求区间[l,r]的区间最大异或和,和在末尾添加一个数 思路:强制在线,保存每个线性基的数值,接下去直接去搜第r个线性基,但要保持时间比l要大,新增了一个pos数组代表一个 ...

  3. 杭电多校 HDU 6641 TDL

    题意:给出一个公式 和公式上的m,k试着求是否有n可以符合上面的公式,若有这输出,没有这输出-1 思路: 1.对于f(n,m)因为与n互质的数很大所以求f(n,m)的时间复杂度并不是很高 2.对于给出 ...

  4. 2019 杭电多校 HDU - 6625 three arrays 字典树+贪心

    题目链接:https://cn.vjudge.net/problem/HDU-6625 题意:a和b两个数组n个数,数字任意组合异或,求得到c数组的字典序最小 题解:对于两个数组从高位到低位建立两个字 ...

  5. 2022杭电多校(一)

    2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...

  6. 杭电多校第七场 1011 Kejin Player HDU(6656)

    杭电多校第七场 1011 Kejin Player 题意:给你N行,代表从i级有花费a[i]元的r[i]/s[i]的概率达到i+1级,剩下的概率中可能会到达x[i]级.然后询问从L级到R级的花费会是多 ...

  7. 2022杭电多校(四)

    2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...

  8. 2022杭电多校(三)

    2022杭电多校(三) 文章目录 2022杭电多校(三) 一.比赛小结 二.题目分析及解法(基础题) 1001.Equipment Upgrade 1002.Boss Rush 1003.Cyber ...

  9. 2019杭电多校 第七场 Kejin Player 6656(求期望值)

    2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...

  10. 2021杭电多校补题——第一场

    2021杭电多校补题--第一场 文章目录 Mod, Or and Everything Rocket land(待补) Puzzle loop(待补) Another thief in a Shop( ...

最新文章

  1. Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper
  2. reactjs antd(ant-design)安装、基本使用及css样式的按需引入
  3. win8系统关闭共享服务器,Windows8系统关闭Windows Media Player网络共享服务的方法
  4. Django从理论到实战(part1)--虚拟环境
  5. 【年末盛会】最值得参加的信息技术与计算机应用学术会议来了!
  6. opensips mysql 版本_Opensips-1.11版本安装过程
  7. 购买女装摩托车(踏板车)
  8. STM32工作笔记0008---TFT显示屏和LCD显示屏的区别
  9. python模拟足球比赛_博客园仿真足球竞赛平台Python版SDK
  10. npm查找依赖包版本
  11. 微信模板消息字体设置变大
  12. zz 联想ThinkPad X230换固态盘小记
  13. linux 移动硬盘位置,在linux中使用移动硬盘
  14. python做矩阵初等行变换,matlab做初等行变换,python 矩阵初等行变换,解线性方程,numpy矩阵运算,sympy矩阵运算,求过渡矩阵,求具体某一基组下的坐标,解析几何
  15. 公开处刑,专家博主开发游戏的老王专栏抄袭事件始末
  16. 纯净正版 WIN10 安装文件官方下载
  17. nRF Connect SDK(NCS)-Windows开发环境搭建
  18. HTML+CSS静态——绿色的餐饮美食网站(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  19. TokenGazer《一问到底》| 第45期 :研究员 VS Reserve
  20. 百度贴吧测试部门实习生电话面试

热门文章

  1. java.lang.IllegalArgumentException at java.sql.Date.getHours
  2. 【设计模式】java设计模式总述及观察者模式
  3. select .. into输出单/多行
  4. 面试官:new Object[5] 一共创建了几个对象?
  5. Https 真的安全吗?可以抓包吗?如何防止抓包吗?
  6. MySQL 事务的实现原理,写得太好了!
  7. 高并发来袭,如何搭建微服务架构?
  8. 软件架构入门,看这篇就够了···
  9. 2019 年中国互联网企业 100 强揭晓,你的公司排在第几位呢?
  10. 「做点事」科技公司成立了!