NC18979 毒瘤xor

题目

题目描述

小a有 \(N\) 个数 \(a_1, a_2, ..., a_N\) ,给出 \(q\) 个询问,每次询问给出区间 \([L, R]\) ,现在请你找到一个数 \(X\) ,使得

  1. \(0 \leq X < 2^{31}\)
  2. \(\sum_{i = L}^R X \oplus a[i]\) 最大,\(\oplus\) 表示异或操作(不懂的请自行百度)

输入描述

第一行一个整数 \(N\) ,表示序列的长度

第二行 \(N\) 个整数,表示序列内的元素

第三行一个整数 \(q\) ,表示询问的个数

接下来 \(q\) 行,每行两个整数 \([L, R]\) ,表示询问的区间

输出描述

输出 \(q\) 行,每行一个整数表示答案

若有多组可行解,请输出较小的解

示例1

输入

5
4 78 12 1 3
3
2 5
1 4
3 3

输出

2147483632
2147483635
2147483635

备注

对于 \(30\%\)的数据,\(n , q ≤ 10\)

对于 \(60\%\) 的数据,\(n , q ≤ 1000\)

对于 \(100\%\) 的数据,\(n, q ≤ 10^5\)

保证 \(a_i < 2^{31}\)

题解

思路

知识点:贪心,位运算。

显然不能每次枚举,需要更快的贪心方法构造一个 \(X\) 。

对于位运算的贪心,只需要让每位到达最优就行,因为互相独立。因此,本题只要对于 \(X\) 的每一位产生的和最大即可。

考察所有 \(a_i\) 某一位,要让这位异或和最大,就要考虑这位的 \(1\) 和 \(0\) 的数量,如果 \(1\) 多,则 \(X\) 这位应为 \(0\) ,否则为 \(1\) 。这里可以用二维数组 \(sum[i][j]\) 代表 \([1,i]\) 的数字中第 \(j\) 位是 \(1\) 的数量,前缀和预处理即可。

但要注意的是,我们要求最小的 \(X\) ,因此在两者皆可时 \(0\) 更优,即 \(1\) 的数量为严格小于一半时就用 \(1\)。这里不能用 sum[r][i] - sum[l - 1][i] < (r - l + 1)/2 ,因为这是取下整,要取上整。

时间复杂度 \(O(n+q)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

int a[100007], sum[100007][31];

int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i];
for (int i = 1;i <= n;i++) {
for (int j = 0;j < 31;j++) {
if (a[i] & (1 << j)) sum[i][j]++;
sum[i][j] += sum[i - 1][j];
}
}
int q;
cin >> q;
while (q--) {
long long l, r;
cin >> l >> r;
int x = 0;
for (int i = 0;i < 31;i++) {
if (2 * (sum[r][i] - sum[l - 1][i]) < r - l + 1) x |= (1 << i);///这里要除的话取上整
}
cout << x << '\n';
}
return 0;
}

NC18979 毒瘤xor的更多相关文章

  1. 【牛客OI赛制测试赛3】 毒瘤xor

    牛客OI赛制测试赛3 毒瘤xor 传送门 题面,水表者自重 Solution 前缀和简单题(挖坑待补) 代码实现 #include<stdio.h> #define int long lo ...

  2. Nowcoder | [题解-N189]牛客OI赛制测试赛3

    这场说实话确实水(逃*1),表示差一点就AK了(逃*2),然而被卡两个特判的我\(ssfd\)...\(qwq\) 表示这是第一次发整场比赛的题解...还请各位大佬原谅我太蒻写的垃圾啊\(qwq\). ...

  3. 牛客OI赛制测试赛3游记

    A - 数字权重 题目大意: 一个\(n\)位的数字.设第\(i\)位的数为\(a_i\),其中\(a_1\)为最高位,\(a_n\)为最低位,\(k\)为给定的数字.求同时满足满足以下两个条件的数的 ...

  4. 牛客OI赛制测试赛3 解题报告

    前话: 话说考试描述:普及难度. 于是想在这场比赛上涨点信心. 考出来的结果:Point:480     Rank:40 然而同机房的最好成绩是 510. 没考好啊!有点炸心态,D题一些细节没有注意, ...

  5. nowcoder(牛客网)OI测试赛3 解题报告

    昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛..... 以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq) 不过我还是日常 ...

  6. [HNOI2011]XOR和路径 && [HNOI2013]游走

    [HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...

  7. [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  8. 二分+DP+Trie HDOJ 5715 XOR 游戏

    题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  9. BZOJ 2115 【Wc2011】 Xor

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

随机推荐

  1. Vue 学习之路(一)- 创建脚手架并创建项目

    安装脚手架 命令 npm install -g @vue/cli 打开 cmd 窗口输入以上命令.当出现以下界面即表示安装完成. 查看已安装脚手架版本 命令 vue -V 在 cmd 窗口输入以上命令 ...

  2. 使用 docker-compose 部署 golang 的 Athens 私有代理

    go中私有代理搭建 前言 为什么选择 athens 使用 docker-compose 部署 配置私有仓库的认证信息 配置下载模式 部署 使用秘钥的方式认证私有仓库 1.配置秘钥 2.配置 HTTP ...

  3. 服务器脚本搭建国基北盛openstack平台

    @ 目录 基础环境搭建 控制节点网卡配置 计算节点网卡配置 主机映射 3,关闭防火墙和selinux以及NetworkManager 设置yum源 计算节点分区 配置openrc.sh环境变量 平台组 ...

  4. PHP 运行 mkdir() Permission Denied 的原因

    使用lamp,在上传文件时,PHP执行 mkdir($path) ,  出现没有权限的错误. 解决: 本次使用的时yii框架,所以首先确保 是apache的用户对web目录有权限,然后再给此用户加 r ...

  5. 等了整整12年!Linux QQ昨天终于更新了!

    一个执着于技术的公众号 前言 2020年4月1日,腾讯QQ Linux版迎来最新版发布,详细版本号为v2.0.0 Beta2.上一个版本v2.3.2发布于2019年10月24日,时隔160天又迎来了更 ...

  6. 超详干货!Linux 环境变量配置全攻略

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux环境变量配置 在自定义安装软件的时候,经常需要 ...

  7. IDEA通用配置

    文件的自动author注释

  8. Python技法:实用运维脚本编写(进程/文件/目录操作)

    Python在很大程度上可以对shell脚本进行替代.笔者一般单行命令用shell,复杂点的多行操作就直接用Python了.这篇文章就归纳一下Python的一些实用脚本操作. 1. 执行外部程序或命令 ...

  9. C\C++白嫖学习

    一.C语言的学习     推荐B站的郝斌老师的C语言教程,播放量可观.注意在学习前可在评论区"找宝藏". 大家可能也知道B站的小甲鱼,个人感觉内容不够优质,讲得有点粗糙,讲的故事有 ...

  10. Hadoop常见shell命令

    Hadoop中常见的shell命令 1.如何将Linux本地的数据上传到HDFS中? hadoop fs -put 本地的文件 HDFS中的目录hdfs dfs -put 本地的文件 HDFS中的目录 ...