首页 > 其他分享 >一类做法基于变化次数的题目的总结

一类做法基于变化次数的题目的总结

时间:2023-07-02 15:34:27浏览次数:56  
标签:总结 qr 题目 log 次数 枚举 端点 区间 gcd

最近遇到不少这类题目啊,但自己像个【数据删除】一样完全没有总结经验,被花式吊打。所以痛定思痛,决定总结一下。

CF475D. CGCDSSQ

我们可以把询问离线下来,求区间 \(\gcd\) 等于 \(x\) 的等价于求区间 \(\gcd\) 不大于 \(x\) 的减去不大于 \(x-1\) 的。考虑固定左端点,每次暴力往右拓展,这是 \(O(n^2\log n)\) 的。

现在,我们要用到一个结论:当你拓展的时候,区间 \(\gcd\) 要么不变,要么至少缩小一半。所以你可以每次二分找到会使得 \(\gcd\) 变小的那个右端点,用 ST 表维护区间 \(\gcd\),时间似乎是 \(O(n\log n\log^2 A)\) 的,但常数极小:后面的 \(\log A\) 是求 \(\gcd\) 的复杂度,可以忽略不计;前面的二分也是跑不满 \(\log n\log A\) 的。

CF1834E. MEX of LCM

还是那个性质:当你拓展的时候,区间 \(\text{lcm}\) 要么不变,要么至少变大一倍。第 \(3\times 10^5\) 个质数是 4256233,故我们只需要不超过 4256234 的数。

我的写法很劣,不知道为什么过不了,所以下面是 emsger 的写法。假设当前枚举到 \(a_i\),考虑开一个双端队列维护以 \(i\) 为右端点的所有可能的 \(\text{lcm}\),同时每次把能得到的数丢进 map 里,最后求 mex 即可。优化就是如果这个双端队列是 \([i,i],[i-1,i]\ldots[1,i]\) 的顺序的话,那么这些 \(\text{lcm}\) 是不减的,且一定是倍数关系。如果当前已经超过答案上限/能被 \(a_i\) 整除,说明也不用看后面的了。这似乎在 \(a_i\) 很小时有巨大优化。

D 【0506 B组】简单的数据结构题

发现如果我们固定一个左端点 \(i\),因为区间变大 and 不增,且一旦变小至少会有一个 1 变为 0,那么这些区间的 and 至多有 \(\log A\) 种取值。可以从右往左枚举 \(i\),维护 \(pos_j\) 表示当前经过的所有 \(k\) 中,满足 \(a_k\) 第 \(j\) 位为 0 的最大的 \(k\)。这样我们就在 \(O(n\log A+n\log A\log\log A)\) 的时间内求出了每个 \(i\) 的 and 值的分割点(后面那个是排序 + 去重的时间)。

现在,我们把询问都离线下来,按左端点从大到小排序。从右往左枚举 \(i\),有一些分割点把 \(i\) 到 \(n\) 分成了若干段,以 \(i\) 为左端点,同一段内的若干个下标作为右端点,得到的 and 是相同的。这样,对于每个 \(i\),我们可以在 \(\log A\) 的时间内求出哪些区间的 and 是完全平方数(因为每段中间的数一定不会影响 and 的值)。

现在,我们把那些 and 为完全平方数的区间,以右端点为下标,丢到一颗线段树上维护。对于询问 \([ql,qr]\),我们只用查询线段树上 \([ql,qr]\) 区间的和即可。因为我们以右端点为下标,故会对答案造成贡献的区间 \([l,r]\) 满足 \(r\le qr\)。同时,枚举 \(i\) 的顺序也决定了 \(l\ge ql\),所以这样统计是不重不漏的。

A 【0630 B组】冤

你可以假定 \(\forall i\in[1,n],a_i\ge1\)。

唉,被诈骗了。

因为三角形需要满足两边之和大于第三边,显然最优选法是排序后取相邻三个。考虑最坏情况,即所有长度构成斐波那契数列。因为 \(a_i\le10^9\),故长度过大的区间一定合法,剩下的暴力判断即可。

标签:总结,qr,题目,log,次数,枚举,端点,区间,gcd
From: https://www.cnblogs.com/xx019/p/17516790.html

相关文章

  • 2 ~ 3 月学习总结
    Grouping随便DP.[PKUSC2018]最大前缀和考虑加入某一个数会产生什么变化和前缀和的性质。显然后缀和必须是一个负数。f,g.如果是一个负数,显然可以塞在g的后面如果前缀f前面是正的,可以塞在g的前面。是正的就塞在f的后面,然后这两种可以合并。lgj[l,r]+1......
  • 7.2总结
    今天有点倒霉,把手机内屏摔碎了,给我干emo了,然后手机拿去修了,上午下午刷pta,现在是10分的一定能坐下来,15分得思考思考,会需要一段时间进行调试各种,有时候测试点过了,但是提交并不是满分,这就头疼了,然后搜答案,看看自己哪点没想到,最后才成功AC。中午自己随便吃了点泡面。今天也开始学java......
  • 验证码生成技术的学习总结(C#)
    作者:光脚丫思考 一、概述一直以来对于验证码这玩意都是使用了别人编写好的代码,最多也就是稍微的做点修改罢了。虽然别人做的东西并不是非常的适合自己使用,但还是给将就将就了一番。这几天呢?不知道是哪里高兴了,终于是好好的把一些别人早就已经使用过的验证码技术给好好的拿来学习学......
  • GO语言调用外部函数失败总结
    目录GO练习的项目结构Q1导入的是空路径Q2导入的路径不全Q3找不到路径A3Q4函数不可调用A4Q5报错UseasvalueA5GO练习的项目结构@:~/goProject/test.cn$tree.├──go.mod├──main.go└──model  └──mysql.go1directory,3filesQ1导入的是空路径......
  • 大二暑期第二周每周总结
    这周完成了数据结构的小学期,开始了数据库的小学期。数据结构我写的是渡船管理模拟系统。主要的操作就是利用文件和队列将准备上船的车进行排序然后保存到文件里。题目如下:【题目3】渡船管理模拟渡口的每条渡轮一次能装载6辆汽车过江,车辆分为客车、鲜货车和普通货车3类,渡船管理规......
  • 每日总结2023年7月1日
    今日学习:数据库小学期的验收工作,至此夏季学期结束。(已经买好后天回杭州的票了捏^^)存储管理:分区存储组织(了解各个适应算法的基本思想);页式存储、段式存储、段页式存储。(软考)遇到的问题:今天懒散了,没有学习Hadoop,光顾着回家了。明天的计划:鲍春安求我下午去给他做一下系统功能,上午......
  • 每周总结
    6.26今天醒的早一点,去报名了驾校准备考驾照,报名后就去体检了,体检非常顺利,前后就预约了科一,开始看题库做模拟题,感觉这题出了好多新规题变难了,感觉要是不好好看题就给挂了,回家后看了看科一的题。吃个午饭睡了一下午,醒了后打了会游戏刷了会儿视频就又吃饭了,吃完饭就学了会儿java,其实......
  • 【总结】如何下载 B 站视频的五种方法
    【总结】如何下载B站视频的五种方法摘自:https://zhuanlan.zhihu.com/p/124293184​目录收起前言B站视频下载方法#1.B站自带的视频缓存功能(官方客户端)1.1哔哩哔哩手机版1.2哔哩哔哩电脑版#2.第三方下载工具(客户端)......
  • SQL基础总结
    影响数据库执行性能的原因:1计算机硬件问题2数据库管理系统问题(ORACLE,SQLSERVER,MYSQL,DB2...)3数据库设计问题(例如:索引的情况)4SQL写法问题5实际应用数据量的多少作为程序员,我们一般不能决定计算机硬件,数据库系统,数据库设计,以及实际应用数据量的多少,所以,我们可以在S......
  • 一周总结
    6月26日:安装了eclipse开始学习java的第一课,起步确实很难,人机交互有点小蒙,本身C就学得不太好,大道至简开了个小头,也是不太明白。 6月27日:去驾校练车的时候看了大道至简的第一章,以愚公的例子,存焉来表达分支结构,写的很详尽,对java的学习算是多了些了解6月28日:学习了helloworld的教......