杭电多校HDU 6579 Operation (线性基 区间最大)题解
题意:
强制在线,求\(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 (线性基 区间最大)题解相关推荐
- 【2019杭电多校训练赛】HDU6681 / 1002-Rikka with Cake 题解(扫描线)
[2019杭电多校训练赛]HDU6681 / 1002-Rikka with Cake 题解 题意 思路 代码 题目来自于:HDU6681 Rikka with Cake 题意 题目的大意是给定你一个 ...
- 2019杭电多校第一场 Operation HDU - 6579
题意:给出一个序列,两种操作,求区间[l,r]的区间最大异或和,和在末尾添加一个数 思路:强制在线,保存每个线性基的数值,接下去直接去搜第r个线性基,但要保持时间比l要大,新增了一个pos数组代表一个 ...
- 杭电多校 HDU 6641 TDL
题意:给出一个公式 和公式上的m,k试着求是否有n可以符合上面的公式,若有这输出,没有这输出-1 思路: 1.对于f(n,m)因为与n互质的数很大所以求f(n,m)的时间复杂度并不是很高 2.对于给出 ...
- 2019 杭电多校 HDU - 6625 three arrays 字典树+贪心
题目链接:https://cn.vjudge.net/problem/HDU-6625 题意:a和b两个数组n个数,数字任意组合异或,求得到c数组的字典序最小 题解:对于两个数组从高位到低位建立两个字 ...
- 2022杭电多校(一)
2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...
- 杭电多校第七场 1011 Kejin Player HDU(6656)
杭电多校第七场 1011 Kejin Player 题意:给你N行,代表从i级有花费a[i]元的r[i]/s[i]的概率达到i+1级,剩下的概率中可能会到达x[i]级.然后询问从L级到R级的花费会是多 ...
- 2022杭电多校(四)
2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...
- 2022杭电多校(三)
2022杭电多校(三) 文章目录 2022杭电多校(三) 一.比赛小结 二.题目分析及解法(基础题) 1001.Equipment Upgrade 1002.Boss Rush 1003.Cyber ...
- 2019杭电多校 第七场 Kejin Player 6656(求期望值)
2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...
- 2021杭电多校补题——第一场
2021杭电多校补题--第一场 文章目录 Mod, Or and Everything Rocket land(待补) Puzzle loop(待补) Another thief in a Shop( ...
最新文章
- Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper
- reactjs antd(ant-design)安装、基本使用及css样式的按需引入
- win8系统关闭共享服务器,Windows8系统关闭Windows Media Player网络共享服务的方法
- Django从理论到实战(part1)--虚拟环境
- 【年末盛会】最值得参加的信息技术与计算机应用学术会议来了!
- opensips mysql 版本_Opensips-1.11版本安装过程
- 购买女装摩托车(踏板车)
- STM32工作笔记0008---TFT显示屏和LCD显示屏的区别
- python模拟足球比赛_博客园仿真足球竞赛平台Python版SDK
- npm查找依赖包版本
- 微信模板消息字体设置变大
- zz 联想ThinkPad X230换固态盘小记
- linux 移动硬盘位置,在linux中使用移动硬盘
- python做矩阵初等行变换,matlab做初等行变换,python 矩阵初等行变换,解线性方程,numpy矩阵运算,sympy矩阵运算,求过渡矩阵,求具体某一基组下的坐标,解析几何
- 公开处刑,专家博主开发游戏的老王专栏抄袭事件始末
- 纯净正版 WIN10 安装文件官方下载
- nRF Connect SDK(NCS)-Windows开发环境搭建
- HTML+CSS静态——绿色的餐饮美食网站(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
- TokenGazer《一问到底》| 第45期 :研究员 VS Reserve
- 百度贴吧测试部门实习生电话面试
热门文章
- java.lang.IllegalArgumentException at java.sql.Date.getHours
- 【设计模式】java设计模式总述及观察者模式
- select .. into输出单/多行
- 面试官:new Object[5] 一共创建了几个对象?
- Https 真的安全吗?可以抓包吗?如何防止抓包吗?
- MySQL 事务的实现原理,写得太好了!
- 高并发来袭,如何搭建微服务架构?
- 软件架构入门,看这篇就够了···
- 2019 年中国互联网企业 100 强揭晓,你的公司排在第几位呢?
- 「做点事」科技公司成立了!