DTOJ4349. 「十二省联考 2019」异或粽子

2024-03-08 23:48

本文主要是介绍DTOJ4349. 「十二省联考 2019」异或粽子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:
有一个长度为n的数列,每次可以取一段区间的异或和,求前k大的取值之和。
n<=5e5,k<=2e5
题解:
考场:显然一段区间的异或和应转化为两个前缀异或和的异或值,于是问题转为给n+1个数,两两之间异或和前k大的和。对于异或和的问题考虑trie树,每次贪心取不同的两边,然后一直没有注意到k和n不是一个数量级别,一直把k当做n*n的级别考虑,就凉了。(甚至暴力的k开的都是long long……)
正解:发现k和n不是一个数量级别,当然要先考虑k了!考虑一个个取当前的最大异或值,为了不重不漏,显然是枚举每个右端点,找前面最大的和它的异或值,但这样找完一个值后要怎么找下一个呢?考虑用优先队列维护动态维护最大值,因为所有右端点和前面的值的异或值就构成了所有可能的值,故对于一个最大值的右端点,取完值后,就找前面和它异或值的次大值,扔进堆里,即堆里的每个元素记下它的右端点。找与前面的数异或的k大值,用可持久化trie树即可。
反思:最近总是死于看题,前两天是题意自己yy错了,然后今天又没有注意到题目的切入口,以后看题要多注意了。

这篇关于DTOJ4349. 「十二省联考 2019」异或粽子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/788819

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

RISC-V (十二)系统调用

系统模式:用户态和内核态         当前的代码都是实现在machine模式下。 系统模式的切换         epc寄存器的值存放的是ecall指本身的地址 。 用ecall指令 系统调用的执行流程         mret这条指令会利用status的mpp值恢复到之前的特权级别。  蓝色的线表示涉及到权限切换。  系统调用的传参

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的. # 图片加法imp

用异或交换两个整数的陷阱

前面我们谈到了,可用通过异或运算交换两个数,而不需要任何的中间变量。 如下面: void exchange(int &a, int &b) {     a ^= b;     b ^= a;     a ^= b; } 然而,这里面却存在着一个非常隐蔽的陷阱。 通常我们在对数组进行操作的时候,会交换数组中的两个元素,如exchang(&a[i], &b[j]),

2019学习计划

工作三年了,第一年感觉是荒废的,第二年开始学习python,第三年开始自动化 感觉自己会的东西比较少,而且不够深入,流于表面 现制定一下今年大概的学习计划 需持续巩固加强:python、ui自动化、接口自动化、sql等 代码量需提升,敲的不够(重点) 学习: 1.移动端测试,appium等 2.前端知识系统整理学习  3.性能测试 4.docker入门,环境搭建 5.shell

Kafka【十二】消费者拉取主题分区的分配策略

【1】消费者组、leader和follower 消费者想要拉取主题分区的数据,首先必须要加入到一个组中。 但是一个组中有多个消费者的话,那么每一个消费者该如何消费呢,是不是像图中一样的消费策略呢?如果是的话,那假设消费者组中只有2个消费者或有4个消费者,和分区的数量不匹配,怎么办? 所以这里,我们需要学习Kafka中基本的消费者组中的消费者和分区之间的分配规则: 同一个消费者组的消费者都订

鸿蒙轻内核M核源码分析系列十二 事件Event

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻内核M核源码分析系列四 中断Hwi 轻内核M核源码分析系列五 时间管理 轻内核M核源码分析系列六 任务及任务调度(1)任务栈 轻内核M核源码分析系列六 任务及任务调度

Flink实例(六十七):自定义时间和窗口的操作符(十二)Flink事件时间何时触发窗口计算

思考:     什么时候才会触发窗口计算?     既然使用的是事件时间那么必然会涉及到水位线(water_mark),水位线在其中扮演的角色是什么?     此时我们带着疑问,一步一步的探究 注意:本篇博客中的所有解释都是在滚动窗口的前提下 Q:为什么要在滚动窗口的前提下进行解释? A:因为滚动窗口相比较滑动和会话来说更容易让大家理解,在本篇博客中着重的是讨论水位线在窗口触发下的场景,

Spark学习之路 (十二)SparkCore的调优之资源调优

《2021年最新版大数据面试题全面开启更新》 欢迎关注github《大数据成神之路》 目录 一、概述 二、Spark作业基本运行原理 三、资源参数调优 3.1 num-executors 3.2 executor-memory 3.3 executor-cores 3.4 driver-memory 3.5 spark.default.parallelism 3.6 spark.storag

【硬刚Java并发】JUC基础(十二):ForkJoinPool 分支/合并框架

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 1  Fork/Join 框架 Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总。 2 Fork/Join 框架与线程池的区别 采用 “工作窃取”模式(work-st