P7603 [THUPC2021] 鬼街(减半警报器模板

前言

这是一个由 lxl 大佬提出的神奇 trick,第一次省选集训的时候有点颓,听完了没写。刚好明天又要讲这个不如写篇题解。

还是,我太弱了;所以又是研究一晚上才写出来,所以还是吧我对这道题的理解讲讲。

正文

何为折半报警器

按照 lxl 的 ppt 上的话来说是这样的:

这种题目一般是你需要维护一个数据结构,初始给定了一些范围,每个范围有权值。每次把包含一个点的所有范围都减去 \(x\)。你需要维护每个范围被减到 \(<0\) 的最早时刻。

图一:

图二:

具象一点说,当每个检测的区间是由多个独立子区间构成,多个区间可能用到相同的子区间,我们就有可能用到他。

多个独立子区间构成就如图一,我们可以不重不漏的吧一个区间分成多个子区间。

个区间可能用到相同的子区间,也就是说我们存子区间的时候可以讲重复子区间可以同时存在一起,如果按照图像来说就可以相当于(图二)把子区间平移。

由于线段的值是子区间的和,呢么一定有至少一个子区间是大于 \(\frac{Sum}{Size}\) 的,如果有一个子区间被将为 \(0\) 一下,我们就将线段重新平分。

整体而言并不是讲所有区间实时更新,而是在子区间被将为 \(0\) 时再对改线段重新同步。

本题如何实现

读完题目会发现,这道题就符合了所说的“当每个检测的区间是由多个独立子区间构成,多个区间可能用到相同的子区间”。我们可以吧每个质因子作为一个子区间维护。

具体而言,我们首先为了将数质因数分解,需要先筛出素数。

后对于增加报警器的操作,因为报警器只能检测安放后的次数,又为了不影响前面的子区间,我们考虑改变本段。考虑将本段的子段的累计先赋值成当前已经记录的数量,再把目标加上这个值,我们就优雅的记录了这个数。而在区间求和的时候就可以得到一种优雅的写法。

对于每次同步我们可以用如下代码。

val[k] -= sum[k] - tmp[k] , tmp[k] = sum[k]

即每次把还未同步的部分加到总和里,再同步数量。

对于每一次闹鬼,就是把输入数的所有质因子(也就是一个子区间)减去上权值,如果这时此区间将为 \(0\) 及以下,则就可能得到答案,或者需要重新分配子区间的值。

当然这里不用全部枚举,我们可以用个 ds 维护一下使要求的数量从小到大排序,当出现不成立时后面的一定不成立就可以退出了。

赋值时有一个细节,我们可以直接赋值上取整。

证明:

设:一个数 \(x\) 有 \(k\) 个质因子权值为 \(sum\)。

若 \(x \mid k\),

每个质因子权值为 $ \frac {sum} {k}$,

根据鸽笼原理,最小的最大值为 \(\frac {sum} {k}\) 符合。

若 \(x \nmid k\),

每个质因子权值最大为 \(\frac {sum} {k + 1}\),

根据鸽笼原理,最小的最大值为 \(\frac {sum} {k + 1}\) 符合。

另外不要忘了“真实的 \(y = y' \bigoplus LastAns\)”。

这样你就可以把这道题切掉了。

Code

本质和第一篇题解没有区别,但是传送门[Link]。

P7603 [THUPC2021] 鬼街(减半警报器模板)的更多相关文章

  1. PUA

    约会技巧 kino技巧 被拒绝的应对方法 (1)一般约会7个小时后,就能带女生回家 (2)点菜时多点一点,以回家放菜为名 (3)理由要文雅 (4)开酒店的理由 第一时间触碰测试 (1)第一次约会要第一 ...

  2. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  3. 使用javaMail和velocity来发送模板邮件

    之前在ssh项目中有用过javaMail和velocity来发送邮件,实现的效果如下所示. 这类邮件主要用于公司的推广宣传,比如商城的促销等场景. 今天打算将邮件模块也集成到ssm项目,也算是对之前做 ...

  4. THUWC逛街记

    1/28 这次打算去THUWC划个水,就定了1/29中午的飞机.同校有几个同学去PKUWC,求稳搭今天的飞机.中午时候听说今天飞长沙的飞机全都取消了,明天有没有也不好说( 事实证明29号有飞机:( ) ...

  5. windows&lunix下node.js实现模板化生成word文件

    最近在做了一个小程序!里面有个功能就是根据用户提交的数据,自动生成一份word文档返回给用户.我也是第一次做这功能,大概思路就是先自己弄一份word模板,后台接受小程序发过来的数据,再根据这些数据将相 ...

  6. 常用oracle可重复执行的脚本模板

    为保证脚本的可重复执行以及丢失,涉及到数据库环境的移植等,就会使用可重复执行脚本,此处仅提供相关一些模板 说明下:该脚本需要在命令窗口执行,而不是在SQL窗口执行 创建序的脚本 /** * 作者:zk ...

  7. scrapy系列(二)——startproject、genspider创建项目与模板使用

    阅读本文之前需要安装scrapy,如果你还没有安装该框架,那么可以看之前一篇文章scrapy1.2windows安装. 现在默认大家都已经成功的安装了scrapy可以开始大展身手了.本文主要讲的是新建 ...

  8. 算法模板学习专栏之总览(会慢慢陆续更新ing)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/7495310.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  9. HDU 1512 Monkey King(左偏树模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意: 有n只猴子,每只猴子一开始有个力量值,并且互相不认识,现有每次有两只猴子要决斗,如果认识,就不打了 ...

  10. IDEA类和方法注释模板设置

    在开发中使用idea的注释总结:由于IDEA自带的注释模板不是太好用,所以整理一下适用于自己的模板: 一.首先我们来设置IDEA中类的模板:(IDEA中在创建类时会自动给添加注释) 1.File--& ...

随机推荐

  1. @click使用三元运算符

    @click="scope.row.status == 1 ? '' :  blockUp(scope.row) "

  2. beta冲刺:总结随笔

    这个作业属于哪个课程 <班级的链接> 这个作业要求在哪里 <作业要求的链接> 这个作业的目标 beta冲刺总结 作业正文 .... 其他参考文献 ... 一.预期计划 | 6. ...

  3. HTML-CSS常用代码

    注释标签:对代码进行说明<!-- 单行注释,也可以对多行文字进行注释 -->常用格式标签<b>加粗</b> <i>斜体</i> <u& ...

  4. OSPF故障诊断

  5. 2022中职组网络空间安全 A模块

    A-1任务一 登录安全加固 1.密码策略(Windows,Linux) 主要是针对windows和Linux的系统加固,类似于运维的题目 a.设置最短密码长度为15: 这里并没有说明具体是Window ...

  6. Cesium近地天空盒,解决图片旋转问题

    前言 当我们使用官网的例子设置天空盒后,会发现天空云彩是斜的,比如下边这张图:通过查阅网上资料,需要修改cesium的源码,以下是修改后skybox的源码,在自己的项目中引入即可: 实现代码 cons ...

  7. Redis 性能优化

    一.Linux 操作系统 [1]ulimit 与 TCP backlog:1).修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少 ...

  8. JUC——CountDownLatch/CyclicBarrier/Semaphore

    系统性学习,异步IT-BLOG CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用).CountDownLatch 能够使一个线 ...

  9. DDD架构中的领域是什么?

    DDD架构中的领域是什么? ​ 我们经常说到DDD分层架构(领域驱动设计),那么究竟什么是DDD架构?如果去网上查通常会告诉你告诉你区别于过去的三层架构思想,DDD(领域驱动设计)是一种四层架构,一般 ...

  10. java开发技术栈如何选型

    前言 2023泰山景区门票免费政策是从1月21日到3月31,今天4.1起不再免费啦,泰山的人.山和系统终于平安的渡劫过去! 洪峰时疯狂的抢票.各类攻击,分销MT两次凌晨抗洪事件,我及其我的团队又一次得 ...