题目链接

题意

给定序列,$q(1\leq q \leq 100000) $次询问,每次查询给定区间内的最大异或子集。

思路

涉及到最大异或子集肯定从线性基角度入手。将询问按右端点排序后离线处理询问,对线性基的每一位贪心的保留靠后的。

代码

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;

using namespace std;

const int N = 500000 + 5;

int n, m, a[N], ans[N], L = 1;
struct node {
    int l, r, id;
    bool operator < (const node & a) const {
        if(r != a.r) return r < a.r;
        return l < a.l;
    }
}b[N];

struct base {
    int b[21], pos[21];

    void add(int x, int id) {
        for(int i = 20; i >= 0; i--) {
            if((x >> i) & 1) {
                if(!pos[i]) {
                    b[i] = x, pos[i] = id;
                    return;
                }
                if(id > pos[i]) {swap(x, b[i]); swap(id, pos[i]);}
                x ^= b[i];
            }
        }
    }

    int query(int id) {
        int res = 0;
        for(int i = 20; i >= 0; i--) {
            if(pos[i] >= id && (res ^ b[i]) > res) res ^= b[i];
        }
        return res;
    }
}bs;

int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
    scanf("%d", &m);
    for(int i = 1; i <= m; i++) scanf("%d%d", &b[i].l, &b[i].r), b[i].id = i;
    sort(b + 1, b + 1 + m);
    for(int i = 1; i <= m; i++) {
        while(L <= b[i].r) bs.add(a[L], L), L++;
        ans[b[i].id] = bs.query(b[i].l);
    }
    for(int i = 1; i <= m; i++) printf("%d\n", ans[i]);
    return 0;
}

Codeforces 1100F(线性基+贪心)的更多相关文章

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

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

  2. BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)

    题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...

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

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

  4. 【BZOJ-2460&3105】元素&新Nim游戏 动态维护线性基 + 贪心

    3105: [cqoi2013]新Nim游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 839  Solved: 490[Submit][Stat ...

  5. 【题解】 bzoj3105: [cqoi2013]新Nim游戏 (线性基+贪心)

    bzoj3105,懒得复制 Solution: 首先你要有一个前置技能:如果每堆石子异或和为\(0\),则先手比输 这题我们怎么做呢,因为我们没人要先取掉几堆,为了赢对方一定会使剩下的异或和为\(0\ ...

  6. BZOJ.2460.[BeiJing2011]元素(线性基 贪心)

    题目链接 线性基:https://blog.csdn.net/qq_36056315/article/details/79819714. \(Description\) 求一组矿石,满足其下标异或和不 ...

  7. [bzoj 2460]线性基+贪心+证明过程

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2460 网上很多题目都没说这个题目的证明,只说了贪心策略,我比较愚钝,在大神眼里的显然的策略 ...

  8. bzoj 2460: [BeiJing2011]元素【线性基+贪心】

    先按魔力值从大到小排序,然后从大到小插入线性基中,如果插入成功就加上这个魔力值 因为线性基里是没有异或和为0的集合的,所以正确性显然,然后最优性,考虑放进去一个原来没选的,这样为了可行性就要删掉一个, ...

  9. bzoj 3105: [cqoi2013]新Nim游戏【线性基+贪心】

    nim游戏的先手必胜条件是所有堆的火柴个数异或和为0,也就是找一个剩下火柴堆数没有异或和为0的子集的方案,且这个方案保证剩下的火柴个数总和最大 然后我就不会了,其实我到现在也不知道拟阵是个什么玩意-- ...

随机推荐

  1. vue2.0 :style :class样式设置

    HTML :style 的用法 <el-dialog custom-class="creatUser-wrap" :style="{display:formShow ...

  2. 利用XShell上传、下载文件(使用sz与rz命令)

    XSHELL工具上传文件到Linux以及下载文件到本地(Windows)   Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz.首先你 ...

  3. linux-python3.8安装

    环境:  centos7.5 版本:python3.8 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-deve ...

  4. Linux实战教学笔记51:Zabbix监控平台3.2.4(三)生产环境案例

    https://www.cnblogs.com/chensiqiqi/p/9162986.html 一,Zabbix生产环境监测案例概述 1.1 项目规划 [x] :主机分组 交换机 Nginx To ...

  5. springBoot集成redisCluster

    本文主要内容:springBoot简介,在SpringBoot中如何集成Redis,可配置Redis集群. 关于SpringBoot 你想要的,这里都有:https://spring.io/proje ...

  6. 【原创】JAVA面试解析(有赞一面)

    本文的题目出自博客 http://www.54tianzhisheng.cn/2018/07/12/youzan/ 但是作者没有给出答案,博主斗胆来制作答案版. 引言 说在前面的话: 本文适合人群:急 ...

  7. vue-cli3

    官网 https://cli.vuejs.org/zh/ ie11 的问题 https://stackoverflow.com/questions/52056358/vue-cli-3-project ...

  8. Python中的垃圾回收与del语句

    python中的垃圾回收采用计数算法 一个对象如果被引用N次,则需要N次(即计算引用次数为零时)执行del 才能回收此对象. a = 100 b = a del a print(b) print(a) ...

  9. JQuery 选择某个td中第二个a标签 控制特殊样式

    a标签没有disabled属性,那么当我们想禁用a标签的点击事件的时候按照下面方法设置. 下面是html代码: <a id="entry” class="entry" ...

  10. Nginx 处理Http请求简单流程

    L45 1:三次握手后 系统内核收到请求根据端口负载均衡的分配到某个worker 2:nginx 会分配一个512byte链接内存池 3:初始化nginx的http模块并等待用户请求,假设用户在cli ...