CF1100F Ivan and Burgers
2024-09-13 06:03:07
题目地址:CF1100F Ivan and Burgers
一道有难度的线性基题,看了题解才会做
预处理两个数组:
\(p_{r,i}\) 表示满足下列条件的最大的 \(l\) :线性基第 \(i\) 位有值且 \(l\leq r\)
\(b_{r,i}\) 表示此时第 \(i\) 位的线性基
对于每个询问,从高往低位取
当然这个方法也能离线做
时间复杂度为 \(O(nlog\ n)\)
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 500006;
int n, q, b[N][21], p[N][21];
inline void get(int x, int k, int r) {
for (int i = 20; i >= 0; i--)
if ((x >> i) & 1) {
if (!b[r][i]) {
b[r][i] = x;
p[r][i] = k;
return;
}
if (p[r][i] < k) {
swap(p[r][i], k);
swap(x, b[r][i]);
}
x ^= b[r][i];
}
}
inline int work(int l, int r) {
int ans = 0;
for (int i = 20; i >= 0; i--)
if (p[r][i] >= l) ans = max(ans, ans ^ b[r][i]);
return ans;
}
int main() {
cin >> n;
for (int r = 1; r <= n; r++) {
int x;
scanf("%d", &x);
memcpy(b[r], b[r-1], sizeof(b[r]));
memcpy(p[r], p[r-1], sizeof(p[r]));
get(x, r, r);
}
cin >> q;
while (q--) {
int l, r;
scanf("%d %d", &l ,&r);
printf("%d\n", work(l, r));
}
return 0;
}
最新文章
- 第四组 12月8号sprint会议
- 新闻发布系统<;分页>;
- HP QC IE11不支持( win7 64位 无法安装)解决方法
- 线程中无法实例化spring注入的服务的解决办法
- python 基础——多重继承
- 最好用的汉字转拼音代码PinYin4Objc(PinYin4J的objc版本)
- 添加点标注IMarkerElement
- .Net 4.5 Task
- windows对象的属性和方法
- 使用XmlReader读Xml
- LeetCode:链表排序
- Linux常用命令3--如何设置IP地址?如何更改系统时间?
- ATL opengl
- git(创建,提交,回退)
- P1345 [USACO5.4]奶牛的电信Telecowmunication
- [Oracle][RMAN] Use RMAN to Migrate database from CentOS_5-11201-SingleDB to OracleLinux_5-11204-SingleDB
- 在思科路由器上配置AAA认证
- Python3,x:Fiddler抓包工具如何进行手机APP的数据爬取
- COCOS学习笔记--粒子系统
- HDFS文件系统