2A
略
2B
经典的一类题,选择一个顺序(一般是删除)最大/小化答案,这种一般都是正/逆序直接贪心就对了。
2C
简单但很好的题,提示我们瞪不出来,可以数学化一下题意,可能更容易意识到操作的本质。
2D(upsolved)
赛时卡了半天,赛后发现思考方向完全错误。
排序时,对于相邻项(和几乎相邻项)的交换次数问题,一定要从逆序对角度来考虑(逆序对数量或奇偶性)
很显然,交换相邻项,会且仅会使逆序对个数减少 1,那么原题意就等价于是否存在一个排序的时刻,交换两个位置相差为 2 的数,能够使逆序对个数减少 2(这样就可以减少总交换次数)
简单推一下就会发现当且仅当连着的三个数为 \((a,b,c)\),交换 \((a,c)\),且三数原来满足 \(a>b>c\) 时
所以我们希望能凑出来一个满足条件的 \((a,b,c)\)
不难发现能够凑出来当且仅当原子数组中存在一个长度为 \(3\) 的降序子序列,用线段树维护即可
2E1+E2
没啥好说的,唯一重要的是它引出了一个重要的思考,如果能观察到答案只有可能是 \(k\) 或 \(k-1\),我们就可以不用去求,而可以把求的过程转化为判定(k是否是一个合法的答案),这往往难度更小
还有就是bitset优化背包,出烂了感觉
2F(upsolved)
非常厉害的trick题
我们苦于不会维护链式反应中位置的移动,考虑到发生链式反应的时候,相对顺序上相邻的滑块在位置上必须相邻,所以我们放弃传统的统计位置的方式,令 \(p'_i=p_i-i\),这样,两个位置上相邻的滑块拥有相同的 \(p'_i\)
紧接着我们就可以将一种操作转化为数学的语言,将滑块 \(i\) 移动到 \(x\),相当于对 \(j\leq i\),\(p'_j=\min(p'_j,x-i)\),对 \(j\geq i\),\(p_j\max(p'_j,x-i)\)
那么我们枚举滑块 \(i\),其可能的位置至多只有 \(1+q\) 种,直接枚举位置,对于每个位置,\(O(1)\) 用组合数学计算答案即可(我还用了一步容斥)