好久以前的了。
T2
sb 模拟
T5
\(n\times n(n\le2\cdot10^5)\) 的表格,每列一个房子,你要给出一个排房子的方案,使得 \(\forall i\) 房子,\(\exists j\) 房子使两个房子的曼哈顿距离 \(=a_i\),保证 \(a_i\le n\).
T8
定义一个好的序列为,这个序列存在一个只出现一次的数
现给出长度 \(n(\le2\cdot10^5)\) 的序列 \(a(1\le a_i\le n)\),问最少修改多少个数使 \(a\) 的每个子段都是好的序列.
T9
给长度 \(n(\le2\cdot10^5)\) 的字符串 \(a\),对于 \(\forall i\in[l..r]\) 回答,若把 \(a\) 分成 \(i\) 段,这 \(i\) 段的 LCP 最大是多少.
Solutions:
T5
把 \(a_i\) 从大到小排序,容易想到一个个排房子;然后一个一个的“之”字形放
\(a\) 为排列时单独讨论 \(n=2,3\)
T8
首先每次修改都应该改成数组中没出现过的数,这样包含该数的子段都满足条件
然后就有策略:遍历数组,记最后一次修改的位置为 \(p\),若有一个后缀 \([l..i]\) 不满足条件 \((l>p)\),就修改 \(i\)
想一个暴力:记一个变量 \(cnt\),从 \(i\) 开始从右往左扫,第一次遇到一个数就 \(cnt+1\),第二次遇到一个数就 \(cnt-1\),当某次 \(cnt=0\),就需要改 \(i\)
这个东西可以线段树维护:
- 新加了 \(a_i\),讨论 \(a_i\) 第一次出现、第二次出现、第 n 次出现,这是区间加
- 由于显然 \(cnt\ge0\),查区间 \(\min\) 就行
T9
首先随便怎么预处理出 \(a\) 的每个前缀在原串中不重叠的出现多少次
然后对于 \(i\in[l..r]\),二分答案