我们定义一个矩阵的权值为这个矩阵四个角上的数值的最小值。现在小M有一个矩阵,他想在这个矩阵中寻找到一个权值最大的子矩阵,请你告诉他这个最大权值。(距形规模最大为2000*2000)
比赛 看到第二题那么大的数据 就他妈不想写了。。直接写了个爆搜看第三题,也就是这题。。总感觉可以做的感觉,但就是想不出好的办法,爆搜估计也就10分,感觉不大合算,自己写了几组数据,感觉答案一般都会在2*2的矩形里,就直接枚举了2*2的矩形,还怀揣着骗个30~40的分,结果逗比了,0分。。
标准算法应该是二分答案,将不比mid小的标记为1,从上往下扫描,如果有2对1在同一列,比如(2,2)(2,4) 和(3,2)(3,4),就说明可以构成一个矩形,那么答案一定大于等于mid,就把左边界mi设为mid,否则把右边界ma设为mid-1.具体用二维hash记录点对,比如扫到某一行第i和第j列都是1,就hash【i】【j】=1;
复杂度分析空间 复杂度(n^2),时间复杂度,首先二分 log(max-min),然后是每次对矩形的扫描n^2,扫描的同时记录点对,但点对的数目最多n^2,因此总的时间复杂度O(log(max-min)* n^2)。
二分真他妈是个好用的东西。。 。
yzoi1000ms+AC,杭州给的数据1s过不去。。。(APOI银牌的大神说他20个测试点加起来都没1s。)
输入应该用getchar()优化。
本来早上想把这题A了,结果总感觉很难写,就去打了游戏。。。下午又一觉睡到4点半。赶紧起来码半小时+就写好了。。