jzoj6924

由于讲题讲得太急,具体处理两行的操作只是“随便”地讲了一下,但怎么操作很关键(这里仅作参考,实测最大595799 )


对于n=2的情况

大概是如下这个图

移动的数
移动的数为1或空行已经填满
移动的数为2
移动的数为2
移动的数为1
移动的数为1或第二行被填满
移动的数为2或第一行被填满
第一行的数不全是1
从第1行移动若干数使第一行的数仅剩下1
从第2行移动若干数使第二行仅剩2
空行
第一行
空行
从空行移动若干个2到第二行
从第一行移动若干个数使第一行的数仅剩下1或第二行或空行被填满
第二行
空行
清空空行
第一行
第二行

对于n> 2的情况

对于现在考虑的行数 l ∼ r l\sim r lr,都有 a i , j ∈ [ l , r ] a_{i,j}\in[l,r] ai,j[l,r](一开始是这样)
可以考虑将其分成 l ∼ m i d l\sim mid lmid m i d + 1 ∼ r mid+1\sim r mid+1r 两部分
然后枚举左区间的 i i i和右区间的 j j j,把大于mid的数看做2,把其它数看作1,进行上述操作
接着分治做下去

贴士

直接把大于mid的数看做2,把其它数看作1时,有时两个行的数中大于mid的数很多,有时不大于mid的数很多,导致1和2的数量不一致,会卡进死循环,所以以大于mid这个条件作为第一关键字,然后对1多出的点标记为2,对2多的点标记为1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值