题目地址: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. jsp+servlet+jdbc实现表单提交

    1.新建一个maven工程,选webapp模板 2.安装tomcat https://tomcat.apache.org/download-80.cgi 下载解压到自定义目录上 ps:在全局变量加上J ...

  2. python机器学习-sklearn挖掘乳腺癌细胞(五)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  3. shell关于文件操作

    一.如何将一个十进制的整数用2进制表示出来? echo "obase=2;50" | bc 二.Linux下经常需要删除空白行,grep,sed,awk,tr等工具均可实现 gre ...

  4. spring整合curator实现分布式锁

    为什么要有分布式锁? 比如说,我们要下单,分为两个操作,下单成功(订单服务),扣减库存(商品服务).如果没有锁的话,同时两个请求进来.先检查有没有库存,一看都有,然后下订单,减库存.这时候肯定会出现错 ...

  5. Hadoop记录-Hadoop集群添加节点和删除节点

    1.添加节点 A:新节点中添加账户,设置无密码登陆 B:Name节点中设置到新节点的无密码登陆 C:在Name节点slaves文件中添加新节点 D:在所有节点/etc/hosts文件中增加新节点(所有 ...

  6. 【转】C语言中的符号优先级

    转自: http://blog.csdn.net/huangblog/article/details/8271791 虽然在日常使用中,添加括号来明确规定运算符优先级是一种常识,但毕竟学校考试就喜欢考 ...

  7. python --github 刷题

    第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? import r ...

  8. 认证加密算法php hash_hmac和java hmacSha1的问题

    public class Test{ public static void main(String[] args) throws Exception { String postString = &qu ...

  9. gcd 二进制/循环

    #include<bits/stdc++.h> #define LL long long using namespace std; inline aabs(LL x){ ?x:-x;} i ...

  10. bzoj 3620 暴力KMP

    十分暴力的KMP,枚举左端点,在向右侧推进的同时,取较小的la保证条件,n方暴力 #include<bits/stdc++.h> #define rep(i,j,k) for(int i= ...