25.09.25
CF2146F
sort 函数就是冒泡排序的轮数,而冒泡排序每轮让所有位置逆序对减一,直到全部非正。
因此记 \(f_i=\sum\limits_{j<i}[p_j>p_i]\),那么 sort 就是 \(f_i\) 的最大值,而 \(b_i\) 只涉及到前缀的 \(f_i\),\(f_i\) 同样是前缀信息,因此我们可以直接跳过 \(b_i\) 考虑 \(f_i\)。
对于一个限制 \((k,l,r)\),先考虑下限,也就是 \(f_i\le k\) 至少有 \(l\) 个,那么有 \(f_l\le k\)。
我们发现下限的约束也就只有这么一点,也就是 \(i\le l\) 的位置 \(i\),其填法为 \(\min(i,k+1)\)。
上限不好同时处理,不妨设计为容斥,也就是 \((k,l)\) 正贡献,\((k,r+1)\) 负贡献。
显然不能枚举子集或者其大小的容斥,考虑一些值域上的,发现 \(k\) 大的部分会被 \(k\) 小的完全抵消,因此按照 \(k\) 排序后做个 \(dp(k,i)\) 表示上个 \(k\) 约束到了 \(i\) 即可。
3301
数连通块这种东西就比较困难,然后注意到这是个网格图,也就是平面图,有一个东西叫平面图欧拉公式 \(V-E+F=2\)。
我们考虑黑点 \(V\) 个,\(E\) 条边,其划分出的 \(F\) 个面中,大多数都是白点的连通块,只有四个黑点的矩形不是。
而这个公式的变型是 \(V-E=2-F\),把最外面那个无限大的面删掉,变成 \(V-E=1-F'\),正好就是一个黑连通块减去内部的白连通块和四个黑点的矩形。
因此直接扫描线维护黑色点数和边数,同时算出四个黑点的矩形即可。
第一步感觉是比较神秘,属于是知道这一类就知道,不知道就不会做,算是积累了。

浙公网安备 33010602011771号