Codeforces Round 956 F. array-value 【01Trie查询异或最小值】

F

题意

给定一个非负整数数组 a a a
对每个长度至少为 2 2 2 的子数组,定义其权值为:子数组内两两异或值最小
b ⊂ a [ l , r ] , w ( b ) = min ⁡ l ≤ i < j ≤ r { a i ⨁ a j } b \subset a[l, r], \quad w(b) = \min_{l \leq i < j \leq r} \{a_i \bigoplus a_j\} ba[l,r],w(b)=minli<jr{aiaj}

求出所有子数组中权值第 k k k 小的权值

思路

我们可以先二分答案 m i d mid mid,并且快速统计有多少个子数组的权值 ≤ m i d \leq mid mid,记为 c n t cnt cnt,如果 c n t ≥ k cnt \geq k cntk,说明答案可能比 m i d mid mid 更小,否则说明答案一定比 m i d mid mid 更大

问题在于如何快速统计 c n t cnt cnt? 注意到其实随着子数组越大(越长),那么其权值一定是非递增的,也就是说更大的子数组会有更大的可能性满足权值 w ≤ m i d w \leq mid wmid

基于上述的观察,我们考虑先枚举区间的右端点 r p rp rp,我们要选择最大 l p lp lp,使得 a [ l p , r p ] a[lp, rp] a[lp,rp] 里, 任意一个右端点在 r p rp rp 的子数组,其权值都大于 m i d mid mid,也即是 a [ l p , r p ] a[lp, rp] a[lp,rp] 里任意两两的异或权值都大于 m i d mid mid,等价于两两异或的最小值大于 m i d mid mid

又由于我们是从小到大枚举 r p rp rp 的,那么上一轮的 r p − 1 rp - 1 rp1 就对应着其极大的 l p lp lp,如果 l p lp lp 再小(即子数组更长),那么就会破坏上面的约束,使得最小值小于等于 m i d mid mid

因此新加入 a r p a_{rp} arp 时,我们只需要在 01 T r i e 01 \; Trie 01Trie 上对 a r p a_{rp} arp 查询异或最小值(因为前面 [ l p , r p − 1 ] [lp, rp - 1] [lp,rp1] 两两异或值都符合要求),不难发现,我们的 l p lp lp非递减的,这是一个双指针的过程。

对于一对极大的 [ l p , r p ] [lp, rp] [lp,rp],右端点在 r p rp rp 的权值小于等于 m i d mid mid 的子数组数量为 l p − 1 lp - 1 lp1,即左端点的选择范围是: [ 1 , l p − 1 ] [1, lp - 1] [1,lp1]

l p lp lp 右移时(删除某些 a l p a_{lp} alp),我们只需要在 01 T r i e 01 \; Trie 01Trie擦除这些值即可

这样子就在 O ( n log ⁡ A ) O(n \log A) O(nlogA) 下快速统计出了权值小于等于 m i d mid mid 的子数组数量

总体时间复杂度: O ( n log ⁡ 2 A ) O(n \log ^ 2 A) O(nlog2A)

注意每次二分都要清空 T r i e Trie Trie

#include<bits/stdc++.h>
#define fore(i,l,r)	for(int i=(int)(l);i<(int)(r);++i)
#define fi first
#define se second
#define endl '\n'
#define ull unsigned long long
#define ALL(v) v.begin(), v.end()
#define Debug(x, ed) std::cerr << #x << " = " << x << ed;const int INF=0x3f3f3f3f;
const long long INFLL=1e18;typedef long long ll;const int N = 100005;struct node{int son[2];int cnt;int idx;
}tree[N * 32];int tot;void clear(){fore(i, 0, tot + 1){tree[i].cnt = tree[i].idx = tree[i].son[0] = tree[i].son[1] = 0;}tot = 0;
}void insert(int x, int i){int now = 0;for(int i = 29; i >= 0; --i){int ch = (x >> i & 1);if(!tree[now].son[ch])tree[now].son[ch] = ++tot;now = tree[now].son[ch];++tree[now].cnt;}tree[now].idx = i;
}std::pair<int, int> query(int x){ //return [mn, idx]int res = 0;int now = 0;for(int i = 29; i >= 0; --i){int ch = (x >> i & 1);int to = tree[now].son[ch];if(to && tree[to].cnt){now = to;}else{res |= (1 << i);now = tree[now].son[ch ^ 1];}}return {res, tree[now].idx}; //返回异或最小值和产生的下标i
}void erase(int x){int now = 0;for(int i = 29; i >= 0; --i){int ch = (x >> i & 1);now = tree[now].son[ch];--tree[now].cnt;}
}int main(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int t;std::cin >> t;while(t--){int n;ll k;std::cin >> n >> k;std::vector<int> a(n + 1);fore(i, 1, n + 1) std::cin >> a[i];ll ans = 0;ll l = 0, r = 2e9;while(l <= r){clear();ll mid = l + r >> 1;int lp = 1, rp = 2;ll cnt = 1ll * n * (n - 1) / 2;;insert(a[1], 1);while(rp <= n){while(true){if(lp == rp) break;auto [mn, i] = query(a[rp]);if(mn > mid) break;while(lp <= i){erase(a[lp]);++lp;}}if(lp < rp){cnt -= rp - lp; //减去权值大于mid的子数组数量}insert(a[rp], rp);++rp;}if(cnt >= k){ans = mid;r = mid - 1;}else l = mid + 1;}std::cout << ans << endl;clear();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python--实验6 字典与集合

知识点 集合 集合&#xff08;Set&#xff09;在Python中是一种基本的数据结构&#xff0c;用于存储无序且不重复的元素。以下是关于集合的详细介绍&#xff1a; 集合的定义和特点 无序性&#xff1a;集合中的元素没有特定的顺序。 不重复性&#xff1a;集合中的元素都是唯…

喜讯|华院钢铁行业大模型入选“2024全国企业新质生产力赋能典型案例”

7月2日&#xff0c;由中国科学院主管、科学出版社主办的商业周刊《互联网周刊》&#xff08;CIW&#xff09;联合德本咨询&#xff08;DBC&#xff09;、中国社会科学院信息化研究中心&#xff08;CIS&#xff09;发布了“2024全国企业新质生产力赋能典型案例”。华院计算技术&…

巴基斯坦火爆的slots游戏借力Facebook广告获客优势分析

巴基斯坦火爆的slots游戏借力Facebook广告获客优势分析 在巴基斯坦&#xff0c;Slots游戏凭借其独特的魅力和玩法&#xff0c;深受玩家的喜爱。而在众多的推广渠道中&#xff0c;Facebook广告代投凭借其显著的优势&#xff0c;成为了Slots游戏在巴基斯坦市场推广的重要选择。以…

基于Spring Boot的高校智慧采购系统

1 项目介绍 1.1 摘要 随着信息技术与网络技术的迅猛发展&#xff0c;人类社会已跨入全新信息化纪元。传统的管理手段因其内在局限&#xff0c;在处理海量信息资源时日渐捉襟见肘&#xff0c;难以匹配不断提升的信息管理效率和便捷化需求。顺应时代发展趋势&#xff0c;各类先…

降压转换器-从分立电路到完全集成的模块

降压转换器已存在了一个世纪&#xff0c;是当今电子电路中不可或缺的一部分。本文将讲述一个原始分立式器件如何演变成可以处理数百瓦功率的微型高集成器件。 降压转换器是将输入电压转换为较低的输出电压&#xff0c;基本原理如图 1所示。最初&#xff0c;开关 SW1 关断&…

【k8s中安装rabbitmq】k8s中安装rabbitmq并搭建镜像集群-hostpath版

文章目录 简介一.条件及环境说明二.需求说明三.实现原理及说明四.详细步骤4.1.规划节点标签4.2.创建configmap配置4.3.创建三个statefulset和service headless配置4.4.创建service配置 五.安装完后的配置六.安装说明 简介 k8s集群中搭建rabbitmq集群服务一般都会用到pvc&#x…

中国科学院院士丁汉:人形机器人——机器人与人工智能结合的爆发点

工业制造是国民经济的重要支柱&#xff0c;是实现发展升级的国之重器。早在 2002 年&#xff0c;党的十六大就曾提出&#xff0c;坚持以信息化带动工业化&#xff0c;以工业化促进信息化&#xff0c;走出一条科技含量高、经济效益好、资源消耗低、环境污染少、人力资源优势得到…

DevEco Studio加上AI-通义灵码插件安装

一、下载通义灵码离线安装包 打开官网&#xff0c;https://tongyi.aliyun.com/lingma/download 下载的ZIP文件是&#xff1a;tongyi-jetbrains-latest.zip 二、设置中插件内安装DevEco插件 选择刚下载的ZIP包&#xff0c;确认安装即可。 三、应用确定 如果没有效果就重启DevE…

权力之望怎么下载客户端 权力之望客户端一键下载

权力之望是一款MMORPG新作&#xff0c;支持PC和APP双版本游玩&#xff0c;玩家可以在这里体验自由成长和无限探索的乐趣&#xff0c;并加入这场声势浩大、危机四伏的夺权之战中。游戏的自由度极高&#xff0c;我们在创建角色时就可以感受的到&#xff0c;设有54种能力和60多种职…

升级iOS18有问题?学会这2招能解决90%iOS问题!

在 iOS 18beta发布后&#xff0c;有部分朋友升级后表示遇到了各种奇怪问题&#xff0c;比如升级卡在Apple Logo&#xff0c;黑屏&#xff0c;无限重启&#xff0c;卡在恢复模式&#xff0c;程序闪退&#xff0c;电池消耗过快&#xff0c;发烫等问题。 于是&#xff0c;小编决定…

IP地址与网络监控

在当今的数字时代&#xff0c;网络安全已成为企业和个人都十分关注的重要话题。通过IP地址进行网络监控&#xff0c;可以有效地检测异常流量和可疑活动&#xff0c;从而保护网络免受潜在威胁。本文将详细讨论如何利用IP地址进行网络监控&#xff0c;以及如何识别和应对异常流量…

【C++题解】1290 - 二进制转换十进制

问题&#xff1a;1290 - 二进制转换十进制 类型&#xff1a;进制转换 题目描述&#xff1a; 请将一个 25 位以内的 2 进制正整数转换为 10 进制&#xff01; 输入&#xff1a; 一个 25 位以内的二进制正整数。 输出&#xff1a; 该数对应的十进制。 样例&#xff1a; 输…

【大数据】什么是数据湖?一文揭示数据湖的本质

很多人跟我一样&#xff0c;对于数据湖充满好奇&#xff0c;也许还读了不少数据湖文章&#xff0c;但无论别人怎么说&#xff0c;你还是会觉得难以把握数据湖的本质。 有些人会望文生义说&#xff0c;数据湖嘛&#xff0c;就是什么东西都可以往里面扔&#xff0c;特别是对非结构…

Java面试八股之MySQL如何使用explain优化SQL和索引

MySQL如何使用explain优化SQL和索引 在MySQL中&#xff0c;EXPLAIN是一个非常有用的工具&#xff0c;用于分析和优化SQL查询。它可以帮助你理解查询执行计划&#xff0c;包括如何使用索引、表的连接方式、是否使用了临时表或文件排序等。以下是一些使用EXPLAIN来优化SQL查询和…

【区块链+跨境服务】粤澳跨境数据验证平台 | FISCO BCOS应用案例

立足深化大湾区一体化融合的发展格局&#xff0c;实现跨境数据的互联互通是促进高水平跨境合作的必要前提&#xff0c;然而&#xff0c;在“一 国两制三法域”的背景下&#xff0c;三地监管存在显著差异&#xff0c;机构间直接跨境传输个人数据门槛较高&#xff0c;过去也缺乏可…

docker-1

1.因为docker和宿主机的端口映射&#xff0c;本质是内核的流量转发功能 需要开启 2.docker部署参考前文&#xff0c;镜像无法拉取&#xff0c;配置 阿里云 镜像加速器 3.docker网络流量走向&#xff1f; 主机---宿主机网卡ens33---docker0网桥--docker端口映射生成的虚拟网…

【2024_CUMCM】层次分析法

打分法解决评价类问题 主观性较强&#xff0c;根据权重表格计算得分&#xff08;权重乘以分数再相加&#xff09; 例题 避免直接权重&#xff0c;会导致多次填写不一致 思想&#xff1a;两两比较推测出权重 判断矩阵 上图是层次分析法的判断矩阵&#xff0c;对角线全为1&…

Spring Cloud Alibaba -- 分布式定时任务解决方案(轻量级、快速构建)(ShedLock 、@SchedulerLock )

文章目录 一、 ShedLock简介二、 SchedulerLock三、基于Mysql方式使用步骤1.建表2.引入依赖3.Mysql连接配置4.ScheduledLock配置5.启动类配置6.创建定时任务7.启动多个项目服务进行测试8.SchedulerLock注解说明 四、使用注意事项 一、 ShedLock简介 ShedLock 是一个用于 Java …

国产鸿道Intewel操作系统与Codesys高实时虚拟化运动控制解决方案

随着运控行业的快速发展&#xff0c;实时与非实时业务的融合应用需求日益增长。例如在机器视觉处理领域&#xff0c;无论是在Windows还是Linux平台上&#xff0c;传统实时操作系统无法与非实时操作系统如Windows或Linux兼容&#xff0c;不能充分利用Windows或者Linux系统的生态…

(心情2)研发过程中记录的经典语录,与大家分享!

职场中&#xff0c;一些可以提升的地方&#xff0c;很多时候都是由自己的心态决定的&#xff0c;前段时间不经意翻到了之前2018年记录的云笔记内容&#xff0c;有点感触&#xff0c;拿出来和大家分享了&#xff0c;有则改之&#xff0c;无则加勉&#xff01; 1.提出问题的时候&…