周作业84

E

先考虑现状,发现如果一个区间合法那么右端点向右怎么移都是合法的,那这个就是双指针呀,然后如果O(n)判断显然是超时的,考虑维护相邻的顺序对的个数,如果其等于序列长度减一就合法

F

可以发现操作一一定用在操作二前面,那么我们肯定是找到一个最小值然后用一次操作一,接下来就可以分割成两个区间继续递归

G

不知道,之前写过的

H

看了题解才会的根号分治,如果公差小于 \(sqrt(n)\) 直接枚举公差即可,可以算出他所对应的首项,找到首项的众数即可,那如果大于呢,我们枚举首项位置,值域是 \(10 ^ 5\),所以向后枚举 \(100000 / sqrt(n)\) 即可,注意不能用 \(map\)

I

观察题面,发现一个套路,一个区间的操作可以直接搞成 \([l, l + 1]\) 的操作,那就是消除相邻的逆序对了,从前向后考虑变化操作,如果 \(a[i] = b[j]\) 就把 \(i\) 移动到 \(j\),但是如果存在 \(i <= k <= j\) 且 \(a[k] < a[i]\) 就无法通过相邻交换达成,发现其实就是单点修改和查询前缀最小值,直接线段树搞就可以了

posted @ 2026-10-01 16:03  libohan0518  阅读(5)  评论(0)    收藏  举报