2019杭电多校第一场 Operation HDU - 6579
题意:给出一个序列,两种操作,求区间[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相关推荐
- 2019杭电多校第一场 HDU 6599
题解 枚举所有的回文串 注意,本质不同的回文串最多只有∣S∣|S|∣S∣个 在这些回文串中,有一些是满足要求的,我们对这些串打上标记 首先跑一个ManacherManacherManacher,然后枚 ...
- 2019年杭电多校第一场 1001题blank(DP)HDU6578
2019年杭电多校第一场 1001题blank(DP)HDU6578 解决思路,开一个DP数组来存储0 1 2 3四个字符最后出现的位置,并且在DP中已经==排好序==. DP开四维,DP[i][j] ...
- 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 ...
- HDU-6578 Blank(DP)2019暑假杭电多校第一场
题意:一行有n个空格编号1~n; 每一个空格中填入0,1,2,3中的一个数字.且满足m个限制l,r,x:满足在区间[l,r]正好有x种不同的数字. 有多少种方法可以填充空格以满足所有条件? 思路:dp ...
- 杭电多校第一场第三题 Backpack(异或dp+bitset)
问题描述 爱丽丝有一个容量背包m她现在想用一些物品填充! 爱丽丝有n项目,每个项目都有一个卷v我和值w我. 是否可以从n个项目中选择多个项目,以使背包完全装满(即体积的总和等于背包容量)?如果是这样, ...
- 2019杭电多校第二场1009 HDU6599:求本质不同的回文串长度及数量
hdu6599:求本质不同的回文串长度及数量 hdu6599题意: manacher+后缀自动机+倍增 $O(nlog(n))$ manacher+后缀数组+二分 $O(nlog(n))$ 回文树(回 ...
- 2019杭电多校第九场 Rikka with Cake (hdu6681)
题意:给出一个n * m的蛋糕,切 k 刀,每次从一个点(x,y)向 上下左右的一个方向切,问最后蛋糕被切成了几块 题解:显然,蛋糕的块数就是那么多线段的交点数 + 1.先离散,考虑向左切和向上切的, ...
- 2022 杭电多校 第一场
文章目录 1011 Random 1012 Alice and Bob 1003 Backpack 1002 Dragon slayer 1009 Laser 1011 Random 签到 求一下期望 ...
- 2022杭电多校第一场
A String 题意:求s串1-i(1 <i <n)子串的贡献,贡献为公共前后缀相交并且相交部分长度为k的倍数的数量 题解做法是用exkmp求出s串与所有后缀的LCP后,设LCP为x,那 ...
最新文章
- Java面试笔试题大汇总一(最全+详细答案)
- linux磁盘满处理
- [Python 多线程] Semaphore、BounedeSemaphore (十二)
- python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章
- javafx 安装_JDK安装教程及环境配置
- Matlab:成功解决引用了已清除的变量 handles
- 收藏|2021年阿里云开源镜像站最热门镜像王全梳理(附下载链接和Top20镜像王排名)
- linux vfs open函数,Linux VFS中open系统调用实现原理
- 前端学习(3301):类组件的ref
- scala特性_Scala | 特性应用
- 冠军方案 | 第二届中国“高分杯”美丽乡村大赛第一名总结
- ubuntukylin ubuntu1304
- 硝烟中的Scrum和XP-我们如何实施Scrum 4 (Part 1/2)
- MQ(队列消息的入门)
- 使用servlet原生API作为参数
- 操作两个表的SQL语句,可用在数据源中
- python ----json数据处理
- 2021年道路运输企业主要负责人和安全生产管理人员安全考核题型[安考星]
- Cocos Creator下JavaScript模拟砸金蛋3d旋转效果,附代码
- vue 使用 el-table 添加搜索框 实现简单搜索功能 ,同时判断输入是否为空
热门文章
- ios 扫码枪外设 键盘模式_苹果iOS 13新增滑行键入功能 开启新键盘模式
- 如何在虚拟机上安装TrueNAS系统
- But how to do it? How to avoid direct competition with giants?
- 快到年底了,小伙伴开始关心年终奖话题了
- 直播电商只能卖便宜货吗?
- 还可以这样玩?揭秘打通线上线下新思路
- 专为人工智能和数据科学而生的Go语言,或将取代Python
- Qt4_子类化QTableWidget
- RocketMQ集群详解
- sql server 监视_监视SQL Server报告服务