题链: http://codeforces.com/problemset/problem/480/E题解: 单调队列,逆向思维 (在线的话应该是分治做,但是好麻烦..) 离线操作,逆向考虑, 最后的状态可以用O(N*M)的dp得出最大正方形边长. 然后反向一个一个的把障碍变回非障碍,显然答案不会变小. 维护好up[i][j],down[i][j],分别表示从(i,j)位置向上向下有多长的连续非障碍. 不难发现,如果有更大的答案的话,那么必然包含当前改变的位置的那一行的某些格子. 所以确定了在这一…