NC18979 毒瘤xor
NC18979 毒瘤xor
题目
题目描述
小a有 \(N\) 个数 \(a_1, a_2, ..., a_N\) ,给出 \(q\) 个询问,每次询问给出区间 \([L, R]\) ,现在请你找到一个数 \(X\) ,使得
- \(0 \leq X < 2^{31}\)
- \(\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的更多相关文章
- 【牛客OI赛制测试赛3】 毒瘤xor
牛客OI赛制测试赛3 毒瘤xor 传送门 题面,水表者自重 Solution 前缀和简单题(挖坑待补) 代码实现 #include<stdio.h> #define int long lo ...
- Nowcoder | [题解-N189]牛客OI赛制测试赛3
这场说实话确实水(逃*1),表示差一点就AK了(逃*2),然而被卡两个特判的我\(ssfd\)...\(qwq\) 表示这是第一次发整场比赛的题解...还请各位大佬原谅我太蒻写的垃圾啊\(qwq\). ...
- 牛客OI赛制测试赛3游记
A - 数字权重 题目大意: 一个\(n\)位的数字.设第\(i\)位的数为\(a_i\),其中\(a_1\)为最高位,\(a_n\)为最低位,\(k\)为给定的数字.求同时满足满足以下两个条件的数的 ...
- 牛客OI赛制测试赛3 解题报告
前话: 话说考试描述:普及难度. 于是想在这场比赛上涨点信心. 考出来的结果:Point:480 Rank:40 然而同机房的最好成绩是 510. 没考好啊!有点炸心态,D题一些细节没有注意, ...
- nowcoder(牛客网)OI测试赛3 解题报告
昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛..... 以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq) 不过我还是日常 ...
- [HNOI2011]XOR和路径 && [HNOI2013]游走
[HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...
- [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 ...
- 二分+DP+Trie HDOJ 5715 XOR 游戏
题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- BZOJ 2115 【Wc2011】 Xor
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
随机推荐
- Java语言学习day05--7月2日
今日内容介绍1.引用类型变量的创建及使用2.流程控制语句之选择语句 ###01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scanner类是属于引用数据类型,我们先了解下 ...
- Confluent之Kafka Connector初体验
概述 背景 Apache Kafka 是最大.最成功的开源项目之一,可以说是无人不知无人不晓,在前面的文章<Apache Kafka分布式流处理平台及大厂面试宝典>我们也充分认识了Kafk ...
- .NET Core(.NET6)中gRPC注册到Consul
一.简介 上一篇文章介绍了.NET Core 中使用gRPC,在微服务中,我们通常要把服务做成服务注册,服务发现的方式,那么这里来说一下gRPC是如何注册到Consul中的. Consul的安装这里就 ...
- No value specified for 'Date' BeanUtils.copyProperties 日期为空 转型错误
BEGIN; 最近在用spring data,使用的hibernate实现,然后用了一对多等关系配置,导致PO类转换JSON时会死循环,最后使用VO接受数据解决该问题.PO与VO相互转换我用的是org ...
- 手把手带你入门ECharts
1.什么是ECharts ECharts,缩写来自Enterprise Charts,商业级数据图表,是来自百度商业前端数据可视化团队EFE的一个开源的纯Javascript的图表库,可以流畅的运行在 ...
- Java并发编程扩展(线程通信、线程池)
之前我说过,实现多线程的方式有4种,但是之前的文章中,我只介绍了两种,那么下面这两种,可以了解了解,不懂没关系. 之前的文章-->Java并发编程之多线程 使用ExecutorService.C ...
- STM32 DMA(UART)
转载自https://blog.csdn.net/as480133937/article/details/104827639/
- ASP.NET视图视图表单验证
视图表单验证 初始化项目 新建一个ASP.NET MVC的项目 新建游戏用户类: public class StemUsers { public int id { get; set; } public ...
- 四月总结&五月计划
四月总结 1. 主要任务 <Effective C++>书 ① 进展: 看完了30讲(共55讲),从4月20号开始居家办公,书落在公司了,一直到昨天29号才去园区上班,耽搁了.30讲之前的 ...
- Docker容器网络-基础篇
开源Linux 一个执着于技术的公众号 Docker的技术依赖于Linux内核的虚拟化技术的发展,Docker使用到的网络技术有Network Namespace.Veth设备对.Iptables/N ...