rt。
#include<bits/stdc++.h>
using namespace std ;
int n , m ;
int st[1005][1005][15] , lg[1005] ;
bool check(int x)
{
for( int i = 1 ; i + x - 1 <= n ; i++ )
{
for( int j = 1 ; j + x - 1 <= m ; j++ )
{
int len = lg[x] ;
if(min(st[i][j][len] , min(st[i + x - 1 - (1 << len) + 1][j][len] , min(st[i][j + x - 1 - (1 << len) + 1][len] , st[i + x - 1 - (1 << len) + 1][j + x - 1 - (1 << len) + 1][len]))) >= x)
{
return 1 ;
}
}
}
return 0 ;
}
void solve()
{
cin >> n >> m ;
for( int i = 2 ; i <= min(n , m) ; i++ ) lg[i] = lg[i / 2] + 1 ;
int sum = 0 ;
for( int i = 1 ; i <= n ; i++ )
{
for( int j = 1 ; j <= m ; j++ )
{
int x ;
cin >> x ;
sum += x ;
st[i][j][0] = x ;
}
}
for( int k = 1 ; k <= lg[min(n , m)] ; k++ )
{
for( int i = 1 ; i + (1 << k) - 1 <= n ; i++ )
{
for( int j = 1 ; j + (1 << k) - 1 <= m ; j++ )
{
st[i][j][k] = min(st[i][j][k - 1] , min(st[i + (1 << k - 1)][j + (1 << k - 1)][k - 1] , min(st[i + (1 << k - 1)][j][k - 1] , st[i][j + (1 << k - 1)][k - 1]))) ;
}
}
}
int l = 1 , r = min(n , m) ;
while(l < r)
{
int mid = l + r + 1 >> 1 ;
if(check(mid)) l = mid ;
else r = mid - 1 ;
}
cout << sum - l * l * l ;
}
int main()
{
int t = 1 ;
// cin >> t ;
while(t--) solve() ;
return 0 ;
}