Pagini recente » Cod sursa (job #2801896) | Cod sursa (job #2439463) | Cod sursa (job #2545972) | Cod sursa (job #3165866) | Cod sursa (job #286224)
Cod sursa(job #286224)
#include <cstdio>
#include <queue>
using namespace std;
const int N_MAX = 1000;
int n,m,p;
int a[N_MAX][N_MAX], mx[N_MAX][N_MAX], mn[N_MAX][N_MAX];
pair<int,int> process ( int dx, int dy ) {
deque<int> dq;
for (int i = 0; i < n; ++i) {
dq.clear();
for (int j = 0; j < m; ++j) {
if (j >= dy && dq.front() == a[i][j-dy]) dq.pop_front();
for (; !dq.empty() && dq.back() < a[i][j]; dq.pop_back());
dq.push_back(a[i][j]);
mx[i][j] = dq.front();
}
}
for (int j = 0; j < m; ++j) {
dq.clear();
for (int i = 0; i < n; ++i) {
if (i >= dx && dq.front() == mx[i-dx][j]) dq.pop_front();
for (; !dq.empty() && dq.back() < mx[i][j]; dq.pop_back());
dq.push_back(mx[i][j]);
mx[i][j] = dq.front();
}
}
for (int i = 0; i < n; ++i) {
dq.clear();
for (int j = 0; j < m; ++j) {
if (j >= dy && dq.front() == a[i][j-dy]) dq.pop_front();
for (; !dq.empty() && dq.back() > a[i][j]; dq.pop_back());
dq.push_back(a[i][j]);
mn[i][j] = dq.front();
}
}
for (int j = 0; j < m; ++j) {
dq.clear();
for (int i = 0; i < n; ++i) {
if (i >= dx && dq.front() == mn[i-dx][j]) dq.pop_front();
for (; !dq.empty() && dq.back() > mn[i][j]; dq.pop_back());
dq.push_back(mn[i][j]);
mn[i][j] = dq.front();
}
}
int dif = 0x3f3f3f3f, nr = 0;
for (int i = dx-1; i < n; ++i) {
for (int j = dy-1; j < m; ++j) {
if (dif > mx[i][j] - mn[i][j]) {
dif = mx[i][j] - mn[i][j];
nr = 1;
} else
if (dif == mx[i][j] - mn[i][j]) {
++nr;
}
}
}
return make_pair(dif,nr);
}
int main() {
freopen("struti.in","rt",stdin);
freopen("struti.out","wt",stdout);
scanf("%d %d %d",&n,&m,&p);
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
scanf("%d",&a[i][j]);
for (int i = 0, dx,dy; i < p; ++i) {
scanf("%d %d",&dx,&dy);
pair<int,int> rez = process(dx,dy);
if (dx != dy) {
pair<int,int> rez2 = process(dy,dx);
if (rez.first == rez2.first)
rez.second += rez2.second; else
if (rez.first > rez2.first)
rez = rez2;
}
printf("%d %d\n",rez.first,rez.second);
}
return 0;
}