做题笔记(四)
十一月做题记录。
询问 和 和 即可将 坐标的范围减半,然后可以在 次询问左右解决这个问题。
发现有些东西 都不会选,扔掉,有些东西只有 或者 会选,直接加上权值。
此外的东西都是两者想要争取的,将其按照 排序,那么从前向后取就是最优的,证明考虑临项交换。
重在简化题意,从而套用经典的贪心。
二分中位数,求最大字段和即可。
小细节题,发现前面大多数都是照抄,唯一的区别在于如果后面的一组括号是匹配的,那么可以省去一些右括号。
从 入手数据点分治一下。
的时候,直接 暴力搜索即可。
的时候 ,那么排列数量很少,直接 DP 即可。
转化为求区间种类数 - mex 的最大值。
直接扫描线加上势能线段树即可,先计算 的答案,然后删去 ,变成 ,依此类推。
发现把最大值对齐就好了,然后为了在 次内做好,需要一些冗余操作,这个可以通过每次选最小值得到,可以线段树上二分(可能有更简单的做法)。
感觉现在缺乏的是思维上的方向和技巧,NOIP 前还是专心这一块。
考虑弱化性质。
题目给的是树,但是操作改变了树的形态,不方便 DP 之类,但是树是二分图,从二分图染色的角度分析容易发现答案就是黑白点个数的最小值减一。
这种思想在 - CF1149C 也有提到,不考虑要求的直径,只是考虑所有的链。
首先观察到第一行确定就能确定整个图,那么每个限制都映射到第一行上的一个区间内的奇(偶)数,分开奇偶,利用并查集统计答案即可。
题目给了一个很怪的限制,组内边小于组外边,按值从小到大加入边,思考一下可以得到一个东西能被划分出来当且仅当这是个团。
计数的话考虑上述过程还可以求出其 Kruskal 重构树,那么就是一个子树。
最小权点覆盖等于总和减去最大权独立集。
然后使用 Meet-in-Middle 求解即可。
对于小于根号的数字直接稀疏表维护最大值即可。
对于大于根号的情况,一个数字至多有一个这样的因子,那么相当于区间内不同数字的乘积,使用主席树区间乘法,单点查询即可。
区间乘法用标记永久化代替。
字符串 循环节长度为 ,等价于 。
线段树维护反转的简单方法是对于正反各自维护信息,操作时交换即可。
首先想何时选择先后手,关键在于注意到一个恒等式:
由此可以得到奇偶性的选择,然后为了得到奇数时候的答案,通过连边来刻画两个数字不能同时选择的情况。
容斥后变成求独立集个数,Meet-in-Middle 配合高维前缀和即可。
很有意思的题,容易想到用一些二进制位表示列,另一些表示行,为了让边权尽可能小,也就是相邻的变化量要小,于是想到映射到格雷码上,直接暴力还是超出限制,那么可以把奇偶位分开。
对字符串的长度根号分治。
小于根号的,用扫描线每次 的计算,大于根号就枚举字符串,每次 的计算,利用 的分块即可做到单根号。
DAG 的容斥方法是对 度点容斥。
摩尔投票法解决区间出现次数大于一半的绝对众数问题,将和众数一样的看作是 ,否则看作 ,用线段树合并,得到的答案就可能是绝对众数。
对于单点修改,查询区间某个数出现次数可以直接利用平衡树查找排名,对每个值开一个平衡树即可。
这个棋盘任意时刻都是一个杨表,状态数很少,直接 min-max 对抗搜索即可。
一种求解 优问题的通用方式:
核心在于不重不漏,每次精确的转移到下一个可能成为答案的状态。
对于一些多个序列的问题,往往很多信息是不关心的,利用一步转多步的优化可以只关注很小一部分。
文艺平衡树可以支持维护某个值的出现位置,只需要求其对应节点的中序遍历即可,这个直接记录父亲然后每次暴力跳,作为右儿子的时候才会对中序遍历有贡献。
比较传统的题,分析性质,得到转移点递增后单调队列优化。
讨论一个区间的权值即可。
经典题,做法可以分块或者 LCT,不会 LCT 所以直接分块,直接记录一个点跳出所在块所需要的信息即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】