题目地址: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;
}

最新文章

  1. 第四组 12月8号sprint会议
  2. 新闻发布系统&lt;分页&gt;
  3. HP QC IE11不支持( win7 64位 无法安装)解决方法
  4. 线程中无法实例化spring注入的服务的解决办法
  5. python 基础——多重继承
  6. 最好用的汉字转拼音代码PinYin4Objc(PinYin4J的objc版本)
  7. 添加点标注IMarkerElement
  8. .Net 4.5 Task
  9. windows对象的属性和方法
  10. 使用XmlReader读Xml
  11. LeetCode:链表排序
  12. Linux常用命令3--如何设置IP地址?如何更改系统时间?
  13. ATL opengl
  14. git(创建,提交,回退)
  15. P1345 [USACO5.4]奶牛的电信Telecowmunication
  16. [Oracle][RMAN] Use RMAN to Migrate database from CentOS_5-11201-SingleDB to OracleLinux_5-11204-SingleDB
  17. 在思科路由器上配置AAA认证
  18. Python3,x:Fiddler抓包工具如何进行手机APP的数据爬取
  19. COCOS学习笔记--粒子系统
  20. HDFS文件系统

热门文章

  1. css: position的使用;
  2. Go-day01
  3. mac上安装虚拟机
  4. Java集合、Iterator迭代器和增强for循环整理
  5. springboot学习笔记-5 springboot整合shiro
  6. sklearn-woe/iv-乳腺癌分类器实战
  7. 转 如何阅读TensorFlow源码
  8. ASP.NET新建解决方案和网站
  9. CSS常用选择器的认识
  10. HDU - 6444 Neko&#39;s loop(循环节+最大子段和)