Pagini recente » Cod sursa (job #2434126) | Cod sursa (job #718699) | Cod sursa (job #1941927) | Cod sursa (job #2913125) | Cod sursa (job #2133411)
//sa speram ca intra in memory limit xd
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define N 1003
using namespace std;
int n, m, x, y, q, a[N][N], bst, cnt;
vector <int> vmax[N][10], vmin[N][10];
#define dim 100000
char buff[dim];
int p = 0;
void read(int &nr){
nr = 0;
while(buff[p] < '0' || buff[p] > '9')
if(++p == dim)
fread(buff, 1, dim, stdin), p = 0;
while(buff[p] >= '0' && buff[p] <= '9'){
nr = 10 * nr + buff[p] - '0';
if(++p == dim)
fread(buff, 1, dim, stdin), p = 0;
}
}
void solve(int dx, int dy){
int l, r, sz;
for(int i = 1; i + dx - 1 <= n; i++)
for(int j = 1; j + dy - 1 <= m; j++){
int mx = -1, mn = 8000;
l = j - 1;
r = j + dy - 2;
sz = log2(r - l + 1);
for(int p = i; p <= i + dx - 1; p++){
mx = max(mx, max(vmax[p][sz][l], vmax[p][sz][r + 1 - (1 << sz)]));
mn = min(mn, min(vmin[p][sz][l], vmin[p][sz][r + 1 - (1 << sz)]));
}
if(mx - mn == bst)
cnt++;
else if(mx - mn < bst){
bst = mx - mn;
cnt = 1;
}
}
}
int main(){
freopen("struti.in", "r", stdin);
freopen("struti.out", "w", stdout);
read(n); read(m); read(q);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
read(x), vmax[i][0].push_back(x), vmin[i][0].push_back(x);
int sz = log2(m);
for(int i = 1; i <= n; i++)
for(int pw = 1; pw <= sz; pw++)
for(int j = 0; j + (1 << pw) <= m; j++){
vmin[i][pw].push_back(min(vmin[i][pw - 1][j], vmin[i][pw - 1][j + (1 << (pw - 1))]));
vmax[i][pw].push_back(max(vmax[i][pw - 1][j], vmax[i][pw - 1][j + (1 << (pw - 1))]));
}
while(q--){
read(x); read(y);
cnt = 0;
bst = 8001;
solve(x, y);
if(x != y)
solve(y, x);
cout << bst << ' ' << cnt << '\n';
}
return 0;
}