题意:给出一个序列,两种操作,求区间[l,r]的区间最大异或和,和在末尾添加一个数

思路:强制在线,保存每个线性基的数值,接下去直接去搜第r个线性基,但要保持时间比l要大,新增了一个pos数组代表一个数插入时的时间戳,插入的时候如果可以替换那么就用之后的替换之前的,保证线性基中都是最新的元素,可以直接插入即可以直接插入

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e6 + 5;
const int mod = 998244353;int sum[maxn][50],pos[maxn][50];  //sum数组是数字,pos数组是时间,一共有maxn个线性基,sum[i][j]表示第i个线性基
int tot; //时间戳
void add(int num) {tot++;for (int i = 0; i < 32; i++) {   //保留了每个时间的线性基sum[tot][i] = sum[tot - 1][i];pos[tot][i] = pos[tot - 1][i];}int now = tot;  //  当前时间戳for (int i = 32; i >= 0; i--) {if (num & (1LL << i)) {   //可以插入就直接插入if (sum[tot][i] == 0) {sum[tot][i] = num;pos[tot][i] = now;break;}if (now > pos[tot][i]) {    //如果当前插入的数之前已经存在过,那么就需要替换
                swap(now, pos[tot][i]);swap(num, sum[tot][i]);}num ^= sum[tot][i];}}
}
int query(int l,int r) {    //直接访问的是第r个线性基int ans = 0;for (int i = 32; i >= 0; i--) {     //当前数的出现的时间戳比l大if (pos[r][i] >= l)ans = max(ans, ans xor sum[r][i]);}return ans;
}
int main() {int t;scanf("%d", &t);while (t--) {tot = 0;int lastans = 0;int n, m;scanf("%d %d", &n, &m);int num;for (int i = 0; i < n; i++) {scanf("%d", &num);add(num);}while (m--) {int op, l, r;scanf("%d", &op);if (op == 0) {scanf("%d %d", &l, &r);l = (l xor lastans) % n + 1;r = (r xor lastans) % n + 1;if (l > r) swap(l, r);lastans = query(l, r);printf("%d\n", lastans);} else {scanf("%d", &r);add(r xor lastans);n++;}}}
}

转载于:https://www.cnblogs.com/smallhester/p/11416498.html

2019杭电多校第一场 Operation HDU - 6579相关推荐

  1. 2019杭电多校第一场 HDU 6599

    题解 枚举所有的回文串 注意,本质不同的回文串最多只有∣S∣|S|∣S∣个 在这些回文串中,有一些是满足要求的,我们对这些串打上标记 首先跑一个ManacherManacherManacher,然后枚 ...

  2. 2019年杭电多校第一场 1001题blank(DP)HDU6578

    2019年杭电多校第一场 1001题blank(DP)HDU6578 解决思路,开一个DP数组来存储0 1 2 3四个字符最后出现的位置,并且在DP中已经==排好序==. DP开四维,DP[i][j] ...

  3. 2022“杭电杯”中国大学生算法设计超级联赛 (1) 杭电多校第一场 2 3 4 5 8 12

    题目 1002 Dragon slayer 标程 1003 Backpack AC代码 1004 Ball AC代码 1008 Path AC代码 1009 Laser AC代码 1012 Alice ...

  4. HDU-6578 Blank(DP)2019暑假杭电多校第一场

    题意:一行有n个空格编号1~n; 每一个空格中填入0,1,2,3中的一个数字.且满足m个限制l,r,x:满足在区间[l,r]正好有x种不同的数字. 有多少种方法可以填充空格以满足所有条件? 思路:dp ...

  5. 杭电多校第一场第三题 Backpack(异或dp+bitset)

    问题描述 爱丽丝有一个容量背包m她现在想用一些物品填充! 爱丽丝有n项目,每个项目都有一个卷v我和值w我. 是否可以从n个项目中选择多个项目,以使背包完全装满(即体积的总和等于背包容量)?如果是这样, ...

  6. 2019杭电多校第二场1009 HDU6599:求本质不同的回文串长度及数量

    hdu6599:求本质不同的回文串长度及数量 hdu6599题意: manacher+后缀自动机+倍增 $O(nlog(n))$ manacher+后缀数组+二分 $O(nlog(n))$ 回文树(回 ...

  7. 2019杭电多校第九场 Rikka with Cake (hdu6681)

    题意:给出一个n * m的蛋糕,切 k 刀,每次从一个点(x,y)向 上下左右的一个方向切,问最后蛋糕被切成了几块 题解:显然,蛋糕的块数就是那么多线段的交点数 + 1.先离散,考虑向左切和向上切的, ...

  8. 2022 杭电多校 第一场

    文章目录 1011 Random 1012 Alice and Bob 1003 Backpack 1002 Dragon slayer 1009 Laser 1011 Random 签到 求一下期望 ...

  9. 2022杭电多校第一场

    A String 题意:求s串1-i(1 <i <n)子串的贡献,贡献为公共前后缀相交并且相交部分长度为k的倍数的数量 题解做法是用exkmp求出s串与所有后缀的LCP后,设LCP为x,那 ...

最新文章

  1. Java面试笔试题大汇总一(最全+详细答案)
  2. linux磁盘满处理
  3. [Python 多线程] Semaphore、BounedeSemaphore (十二)
  4. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章
  5. javafx 安装_JDK安装教程及环境配置
  6. Matlab:成功解决引用了已清除的变量 handles
  7. 收藏|2021年阿里云开源镜像站最热门镜像王全梳理(附下载链接和Top20镜像王排名)
  8. linux vfs open函数,Linux VFS中open系统调用实现原理
  9. 前端学习(3301):类组件的ref
  10. scala特性_Scala | 特性应用
  11. 冠军方案 | 第二届中国“高分杯”美丽乡村大赛第一名总结
  12. ubuntukylin ubuntu1304
  13. 硝烟中的Scrum和XP-我们如何实施Scrum 4 (Part 1/2)
  14. MQ(队列消息的入门)
  15. 使用servlet原生API作为参数
  16. 操作两个表的SQL语句,可用在数据源中
  17. python ----json数据处理
  18. 2021年道路运输企业主要负责人和安全生产管理人员安全考核题型[安考星]
  19. Cocos Creator下JavaScript模拟砸金蛋3d旋转效果,附代码
  20. vue 使用 el-table 添加搜索框 实现简单搜索功能 ,同时判断输入是否为空

热门文章

  1. ios 扫码枪外设 键盘模式_苹果iOS 13新增滑行键入功能 开启新键盘模式
  2. 如何在虚拟机上安装TrueNAS系统
  3. But how to do it? How to avoid direct competition with giants?
  4. 快到年底了,小伙伴开始关心年终奖话题了
  5. 直播电商只能卖便宜货吗?
  6. 还可以这样玩?揭秘打通线上线下新思路
  7. 专为人工智能和数据科学而生的Go语言,或将取代Python
  8. Qt4_子类化QTableWidget
  9. RocketMQ集群详解
  10. sql server 监视_监视SQL Server报告服务