首页 > 其他分享 >CF1514D Cut and Stick 题解

CF1514D Cut and Stick 题解

时间:2024-08-08 18:38:11浏览次数:17  
标签:cnt Cut CF1514D val 题解 40 众数 区间

不知道会不会更不好的阅读体验

题目的关键步骤为求出区间绝对众数(频率高于 \(\left \lceil \frac{len}{2} \right \rceil\))的出现次数,本文仅仅对这一问题进行探讨,剩余的解题步骤不难理解,可以参考其他题解。

解法 1

考虑一个随机化的解法,从区间中随 \(40\) 个数,假定其为区间绝对众数,然后对所有的情况取频率最大的那个。

若区间绝对众数存在,其一次被选中的概率为 \(\frac{1}{2}\),\(40\) 次被选中过的概率则为 \(1-2^{-40}\),错误概率极小,可以接受。

区间统计一个数字的出现次数也并不需要 \(O(n)\) 遍历,注意到值域不大,我们对每个值开一个 vector 记录它所有出现的下标,则区间出现次数只需要二分左右端点:

upper_bound(r) - lower_bound(l)

code

这样我们用 \(O(n \log n)\) 的时间复杂度解决了问题,但是带一个 \(40\) 的常数,跑起来可能和根号差不多。

解法 2

前置知识:摩尔投票

在做摩尔投票的过程中,我们维护了两个变量 \(val,cnt\)。既然题目涉及区间查询,我们考虑把这两个值丢到线段树上。

在合并左右区间信息时,若左右区间的投票均选出一个 \(val\),则合并后的区间 \(val\) 不变,\(cnt\) 加和。否则选出 \(cnt\) 更大的并把另一个区间的负贡献加入。

时间复杂度 \(O(n \log n)\)。

code

标签:cnt,Cut,CF1514D,val,题解,40,众数,区间
From: https://www.cnblogs.com/tai-chi/p/18349516

相关文章

  • 电话号码转换 - 华为机试真题题解(Java)
    考试平台:时习知分值:200分(第二题)考试时间:两小时(共2题)题目描述将电话号码转换,需要实现如下的中英文电话号码转换:输入的字符串中每个数字对应为中文数字中的英文单词,如Double表示两个数字相同。将输入的中文数字字符串转换为英文单词的电话号码。若输入不合法,则输出......
  • 图片表格内容识别转换-II - 华为机试真题题解(Java)
    考试平台:时习知分值:200分考试时间:两小时(共2题)题目描述华为云推出了“通用表格识别”服务,可以将图片表格转换成文本数据。请你将文本数据进一步转换为“文本型表格”,如下图所示:输入现给出一个图片表格的文本数据:每行数据形如line3col1A,表示第3行第1列的单......
  • 20240808题解
    话说T2写了个动态树结果考场调不出来,这下大炮打蚊子了。森林(forest)题面:符合条件的森林中深度相同的点度数相同,\(1\lei\len\),求点数为\(i\)的符合条件的森林的种类数。题解:将森林中每一个根节点连到同一个节点上变成一棵树。令\(f(i)\)表示符合条件的树的种类数,那么\(f(i......
  • SSY20240805提高组T2题解
    题干描述题目描述给定一个长度为......
  • Crash 的旅行计划 / 蓝色彼岸花 题解
    前言题目链接:Hydro&bzoj。题意简述一棵\(n\)个结点的树上,每个点有点权,有\(m\)次操作:修改\(u\)的点权;查询以\(u\)为一端的简单路径的点权和最大值。对于\(20\%\)的数据:\(n,m\leq10^3\);对于另\(30\%\)的数据:第\(i\)条边连接\(i\)和\(i+1\);对于......
  • 洛谷 P1019 [NOIP2000 提高组] 单词接龙 题解
    暴搜!!暴搜!!暴搜!!重要的事情说三遍#include<bits/stdc++.h>usingnamespacestd;constintN=25;intn,ans,use[N];strings,word[N];voiddfs(strings){intls=s.size();//s的lengthans=max(ans,ls);//求出最长的单词接龙for(inti=0;i<n......
  • 洛谷P2404 自然数的拆分问题——题解
    洛谷P2404题解传送锚点摸鱼环节自然数的拆分问题题目描述任何一个大于\(1\)的自然数\(n\),总可以拆分成若干个小于\(n\)的自然数之和。现在给你一个自然数\(n\),要求你求出\(n\)的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列......
  • CF1406C Link Cut Centroids
    思路如果一棵树有两个重心,那么从一个重心的一边切割一个点到另外一个重心即可。如果一棵树只有一个重心,那么随意断掉一个点再恢复即可。代码#include<bits/stdc++.h>usingnamespacestd;constintN=100010;structedge{ intto,next;}e[N*2];inthead[N]......
  • Robot Operating System——深度解析单线程执行器(SingleThreadedExecutor)执行逻辑
    大纲创建SingleThreadedExecutor新增Nodeadd_nodetrigger_entity_recollectcollect_entities自旋等待get_next_executablewait_for_workget_next_ready_executableTimerSubscriptionServiceClientWaitableAnyExecutableexecute_any_executable参考资料在ROS2中,我......
  • 【题解】Solution Set - NOIP2024集训Day2 线段树
    【题解】SolutionSet-NOIP2024集训Day2线段树https://www.becoder.com.cn/contest/5431「CF1149C」TreeGenerator™结论:对于括号序列的一个子段,删去所有的匹配括号之后,剩下的不匹配的括号,按顺序构成树上的一条路径。Why?从括号序列的构造出发。每次(相当于开始遍历......