IOI2019
排列鞋子
确定最终顺序后,操作次数即逆序对数
-
对于相同大小的鞋子,显然按出现顺序(即第\(i\)个\(x\)和\(-x\))配对
-
对于两双鞋子,显然按每双中靠前的一只排序不劣
用树状数组统计即可,时间复杂度为\(O(n\log n)\)
景点划分
参考这里
矩形区域
记\(\begin{cases}S_{i}=\{[l,r]\mid \forall j\in [l,r],a_{i,j}<a_{i,l-1},a_{i,r+1}\}\\T_{j}=\{[l,r]\mid \forall i\in [l,r],a_{i,j}<a_{l-1,j},a_{r+1,j}\}\end{cases}\)
以\(S_{i}\)为例,不妨假设\(a_{i,l-1}<a_{i,r+1}\),则\(a_{i,r+1}\)即\(a_{i,l-1}\)右侧第一个比其大的元素
换言之,有\(\forall i\in [1,n],|S_{i}|\sim O(m)\),同理\(\forall j\in [1,m],|T_{j}|\sim O(n)\)
预处理出\(S_{i}\)和\(T_{j}\)后,原问题的条件即\(\begin{cases}\forall i\in [r_{1},r_{2}],[c_{1},c_{2}]\in S_{i}\\\forall j\in [c_{1},c_{2}],[r_{1},r_{2}]\in T_{j}\end{cases}\)
枚举\(r_{1}\)和\([c_{1},c_{2}]\in S_{r_{1}}\),并统计满足条件的\(r_{2}\)——
-
对于第\(1\)个条件,处理出\([c_{1},c_{2}]\in S_{i}\)的\(i\),即要求\(r_{2}\le r_{1}\)最后一个连续的数
-
对于第\(2\)个条件,改为枚举\(c_{1}\)和\([r_{1},r_{2}]\in T_{c_{1}}\),并类似前者求出\(c_{2}\),即在枚举超过\(c_{2}\)时将对应\(r_{2}\)删除
结合两者,用树状数组维护即可,时间复杂度为\(O(n^{2}\log n)\)(默认\(n,m\)同阶)
折线
假设节点遍历顺序为\(P_{1},P_{2},...,P_{n}\),则构造路径
这条路径需满足的条件为\(\begin{cases}y_{P_{1}}\in [0,y_{P_{2}}],y_{P_{3}}\in [y_{P_{2}},y_{P_{4}}],...\\x_{P_{2}}\in [x_{P_{1}},x_{P_{3}}],x_{P_{4}}\in [x_{P_{3}},x_{P_{5}}],...\end{cases}\)
(这里\(\in [l,r]\)仅表示在\(l\)和\(r\)之间,不保证\(l\le r\))
每个不满足的条件就需要额外使用一条线,因此至多有两个条件不满足
考虑依次取最小的\(x,\)最大的\(y,\)最大的\(x\)和最小的\(y\),仅有当某一项比下一项还优时不满足
(以"最大的\(y\)"为例,其条件为\(\in [最小的x,最大的x]\),左边界显然,右边界要求即上述)
将这类点单独考虑,其构成两个\(x,y\)均单调的部分,内部从小到大排列即可
如果任意排列最坏有\(4\)个不满足条件,由于是提答题,可以乱搞处理
一种乱搞:爆搜后两个部分是否翻转和前后顺序(共\(8\)种),总有一组可行
视觉程序
将曼哈顿距离转化为切比雪夫距离,即
此时,距离为\(k\)即其中一项为\(k\)且另一项\(\le k\),这里以前者为例:
求出\(x_{s}=\or_{i+j=s}a_{i,j}\),则对应项即其中两个\(1\)的\(s\)之差(重合即为\(0\))
具体的,差为\(k=\or_{s}(x_{s}\and x_{s+k})\),差\(\le k=(\bigoplus_{s}x_{s})\or\left(\or_{s}\big(x_{s}\and (\or_{j\in [1,k]}x_{s+j})\big)\right)\)
操作次数为\(O(n)\),操作元素为\(O(n^{2})\)(默认\(n,m\)同阶)
天桥
参考这里