首页 > 其他分享 >摩尔投票法学习笔记

摩尔投票法学习笔记

时间:2022-09-04 14:55:06浏览次数:77  
标签:cnt 摩尔 笔记 次数 num 投票 众数 mathrm

摩尔投票法

绝对众数 :数列内出现次数超过数列长度一半的数。

摩尔投票法是一个求绝对众数的利器。

例题

1. 洛谷 P2397 yyy loves Maths VI (mode)

摩尔投票法板子题。

假设现在有一个小房子,有一个新的数 \(x\) 需要进来。

  • 如果房子是空的,那么 \(x\) 就直接进去;
  • 如果房子内的数和 \(x\) 相等,那么 \(x\) 也进去;
  • 否则把房子内的其中一个数带出房子。

其实本质是将众数与其他数配对,然后抵消掉。因为众数出现次数大于一半,所以最后留在房子里的数一定是众数。

2. P3765 总统选举

用线段树维护区间内出现次数超过一半的数 \(num\) 以及它的出现次数与其他数的出现次数之和的差 \(cnt\)。

显然可以合并。合并时分类讨论两个儿子的 \(num\) 是否相等:

  • 若相等,则当前结点的 \(num\) 就是儿子的 \(num\),\(cnt\) 就等于两个儿子的 \(cnt\) 的和;
  • 若不相等,则当前结点的 \(num\) 是 \(cnt\) 更大的儿子的 \(num\),\(cnt\) 为两个儿子的 \(cnt\) 之差的绝对值。

然而此题还要讨论众数出现次数不超过区间长度一半的情况。若不考虑空间,可以对每一个数开一个动态开点线段树记录它在哪些位置出现过。这样查找一个数的出现次数只用询问区间和。然而这样做的空间复杂度是 \(O(n \log \sum k_i)\),无法承受。因此只能开 \(n\) 棵平衡树,每次 \(\mathrm{insert}\) 或 \(\mathrm{erase}\) 相应的位置,然后查询出现次数就找到对应的平衡树,\(r\) 的 \(\mathrm{rank}\) 与 \(l - 1\) 的 \(\mathrm{rank}\) 相减即可。

3. P8496 [NOI2022] 众数

每个数列开一棵动态开点线段树,按前一题的方法 \(\mathrm{merge}\)。插入、删除就用链表维护,注意存每个链表的头元素和尾元素。查询时将对应数列的 \(\mathrm{root}\) \(\mathrm{merge}\) 一下即可。对于操作 \(4\),合并一下两个链表和两棵线段树即可。

标签:cnt,摩尔,笔记,次数,num,投票,众数,mathrm
From: https://www.cnblogs.com/zltzlt-blog/p/16655114.html

相关文章

  • ROM、RAM、FLASH、DDR、EMMC 百科 -- 学习笔记
    思维导图,便于记忆(类别划分,不要在意)简单解释ROM:只读存储器,内容写入后就不能更改了,制造成本比较低,常用于电脑中的开机启动如启动光盘bios,在系统装好的电脑上时,计算机将C......
  • java学习笔记019 JDK 8新特性
    1.Lambda表达式eg1: //原始写法 Runnabler1=newRunnable(){ @Override publicvoidrun(){ System.out.println("helloworld"); } } r1.run(); //Lamb......
  • C++学习笔记-day07
    1、引用......
  • 《Java编程思想》读书笔记(四)
    前言:三年之前就买了《Java编程思想》这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十......
  • 学习笔记1
    第1章引言一.知识点归纳1.Unix的历史Unix是一种通用操作系统。该系统诞生于20世纪70年代早期,由肯·汤普森和丹尼斯·里奇采用贝尔实验室的PDP-11微型计算机开发。1975......
  • Linux笔记
    Linux课程内容Linux简介Linux安装Linux常用命令1.前言1..什么是LinuxLinux是一套免费使用和自由传播的操作系统。说到操作系统,大家比较熟知的应该就是Windows和......
  • 《具体数学》第五章 二项式系数 学习笔记(部分)
    更好的阅读体验从《具体数学》第五章二项式系数中选了一些个人认为比较useful的内容,添加了部分解释和证明。组合数在\(n\)个元素中选择\(m\)个的方案数,记作\(\d......
  • 笔记:sentinel配置链路时web-context-unify=false不生效
    @ConfigurationpublicclassdemoConfig{/***@NOTE在spring-cloud-alibabav2.1.1.RELEASE及前,sentinel1.7.0及后,关闭URLPATH聚合需要通过该方式,spring-clou......
  • SpringMVC学习笔记(四)——REST风格
    1.什么是REST RESTful(REST风格)是一种当前比较流行的互联网软件架构模式,它充分并正确地利用HTTP协议的特性,为我们规定了一套统一的资源获取方式,以实现不同终端之间(客......
  • SpringMVC学习笔记(三)——请求转发与重定向
    1.请求转发 我们可以在控制器方法指定逻辑视图名(ViewName)时,使用“forward:”关键字进行请求转发操作。当控制器方法中所设置的逻辑视图名称以“forward:”为前缀时,该逻......