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

CF1100F Ivan and Burgers的更多相关文章

  1. CodeForces 1100F Ivan and Burgers

    CodeForces题面 Time limit 3000 ms Memory limit 262144 kB Source Codeforces Round #532 (Div. 2) Tags da ...

  2. Codeforces 1100 F - Ivan and Burgers

    F - Ivan and Burgers 思路:线性基+贪心,保存线性基中每一位的最后一个 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #p ...

  3. Codeforces Round #532 (Div. 2):F. Ivan and Burgers(贪心+异或基)

    F. Ivan and Burgers 题目链接:https://codeforces.com/contest/1100/problem/F 题意: 给出n个数,然后有多个询问,每次回答询问所给出的区 ...

  4. 【CF1100F】Ivan and Burgers(线性基,分治)

    题意:给定n个数,每个数为c[i],有q个询问,每次询问从第l个到第r个数字的最大xor和 n,q<=5e5,c[i]<=1e6,时限3s 思路:直接线段树维护区间线性基是3个log,会T ...

  5. Codeforces1100F Ivan and Burgers 【整体二分】【线性基】

    题目分析: 一道近似的题目曾经出现在SCOI中,那题可以利用RMQ或者线段树做,这题如果用那种做法时间复杂度会是$log$三次方的. 采用一种类似于整体二分的方法可以解决这道题. 将序列的线段树模型建 ...

  6. Codeforces1100F. Ivan and Burgers(离线+线性基)

    题目链接:传送门 思路: 按查询的右端点离线. 然后从左到右维护线性基. 每个基底更新为最右边的方案,可以让尽量多的查询享受到这个基底. 用ci维护后更新右端点为i的答案. 代码(析构1000ms,别 ...

  7. CodeForces - 1100F:Ivan and Burgers (线性基&贪心)(离线 在线)

    题意:给定N个数,Q次询问,求区间最大异或和. 思路:一开始想的线性基+线段树.单次线性基合并的复杂度为20*20,结合线段树,复杂度为O(NlogN*20*20):显然,超时. 超时代码: #inc ...

  8. F. Ivan and Burgers(线性基,离线)

    题目链接:http://codeforces.com/contest/1100/problem/F 题目大意:首先输入n,代表当前有n个数,然后再输入m,代表m次询问,每一次询问是询问区间[l,r], ...

  9. Ivan and Burgers CodeForces - 1100F (线性基)

    大意: 给定n元素序列, m个询问$(l,r)$, 求$[l,r]$中选出任意数异或后的最大值 线性基沙茶题, 直接线段树暴力维护两个log还是能过的 #include <iostream> ...

随机推荐

  1. GitHub合并(merge)代码时冲突解决

    1.手动merge-->消除冲突-->然后commit,push 2.每次合并代码之前需要从远程主分支上拉取代码, 3.使用git命令行解决冲突. 新手可参考一些博客https://www ...

  2. django中文学习资料

    Django 2.0 中文官方文档地址: https://docs.djangoproject.com/zh-hans/2.0/ <Django Girls>中文版地址: https:// ...

  3. Idea中的一些快捷键

    最常用快捷键 sout 输出语句 psvm 输出main方法 fori 输出for语句 iter 输出foreach语句 Ctrl+Shift+U 大小写转换 Ctrl+Shift+Enter 补全一 ...

  4. JavaFX 简介

    JavaFX 介绍一提到Java的图形界面库,我们通常听到的都是Swing,或者更老一点的AWT,包括很多书上面介绍的也都是这两种.很多学校.培训班教学的也是这两种技术.但是其实这两种技术都已经过时很 ...

  5. 7.桥接模式(Bridge Pattern)

    动机(Motivate):    在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化, ...

  6. JVM 虚拟机笔记

    GC算法 标记-清除算法复制算法标记-整理算法分代收集 新生代--[15次GC]-->老年代新生代:复制算法老年代: 标记-清除算法或标记-整理算法 GC策略采用的何种算法引用计数算法根搜索算法 ...

  7. java和c#通过esb服务互调用组件

    场景:java和c#写的服务.站点,互相任意调用.实现一切即服务. 解决方案:使用这种轻量级的esb架构,通过tcp通信解决通信传输问题,总线服务解决服务地址问题,契约解决数据交互问题.由于组件封装了 ...

  8. 端口与进程-----Window cmd命令

    ********************  windows 篇 ********************** cmd命令: services.msc    打开本地服务页面 一.查看windows系统 ...

  9. log4j 基础教程【转】

    参考引用自: http://javacrazyer.iteye.com/blog/1135493 我的git地址: https://git.oschina.net/KingBoBo/Log4JDemo ...

  10. SQL-数据库刷题

    因是个人总结,只列出对自己有用的或较难的: 下面这道题,第一次拿到,我尝试用 开窗函数 ROW_NUMBER()OVER() 编号,但是发现不能够处理好连续的问题, 上网查找了别人的解法记录下来,其实 ...