Pagini recente » Cod sursa (job #1268972) | Cod sursa (job #774157) | Cod sursa (job #2631451) | Cod sursa (job #2690249) | Cod sursa (job #490012)
Cod sursa(job #490012)
#include <fstream>
using namespace std;
#define DIM 1<<10
#define OFE 11
#define INF (1<<31)-1
int A[DIM][DIM], MN[DIM][DIM], MX[DIM][DIM], MN1[DIM][DIM], MX1[DIM][DIM];
int Px[OFE], Py[OFE];
int P, U, D[DIM];
int M, N, T, DH, NR;
ifstream f1 ("struti.in");
ofstream f2 ("struti.out");
void cit () {
int i, j;
f1 >> M >> N >> T;
for (i=1; i<=M; ++i)
for (j=1; j<=N; ++j)
f1 >> A[i][j];
for (i=0; i<T; ++i)
f1 >> Px[i] >> Py[i];
}
void init () {
DH = INF;
NR = 0;
}
void dmin (int K1, int K2) {
int i, j;
for (i=1; i<=M; ++i) {
P = 1, U = 0;
for (j=1; j<=N; ++j) {
while (P<=U && A[i][D[U]]>=A[i][j]) --U;
D[++U] = j;
if (D[P]<=j-K1) ++P;
MN1[i][j] = A[i][D[P]];
}
}
for (i=1; i<=N; ++i) {
P = 1, U = 0;
for (j=1; j<=M; ++j) {
while (P<=U && MN1[D[U]][i]>=MN1[j][i]) --U;
D[++U] = j;
if (D[P]<=j-K2) ++P;
MN[j][i] = MN1[D[P]][i];
}
}
}
void dmax (int K1, int K2) {
int i, j;
for (i=1; i<=M; ++i) {
P = 1, U = 0;
for (j=1; j<=N; ++j) {
while (P<=U && A[i][D[U]]<=A[i][j]) --U;
D[++U] = j;
if (D[P]<=j-K1) ++P;
MX1[i][j] = A[i][D[P]];
}
}
for (i=1; i<=N; ++i) {
P = 1, U = 0;
for (j=1; j<=M; ++j) {
while (P<=U && MX1[D[U]][i]<=MX1[j][i]) --U;
D[++U] = j;
if (D[P]<=j-K2) ++P;
MX[j][i] = MX1[D[P]][i];
}
}
}
void difh (int C1, int C2) {
int i, j, h;
for (i=C1; i<=M; ++i)
for (j=C2; j<=N; ++j) {
h = MX[i][j] - MN[i][j];
if (DH > h)
DH = h, NR = 1;
else if (DH == h)
++NR;
}
}
void afs () {
f2 << DH << ' ' << NR << '\n';
}
void parc () {
for (int t=0; t<T; ++t) {
init ();
dmin (Px[t], Py[t]);
dmax (Px[t], Py[t]);
difh (Py[t], Px[t]);
if (Px[t] != Py[t]) {
dmin (Py[t], Px[t]);
dmax (Py[t], Px[t]);
difh (Px[t], Py[t]);
}
afs ();
}
}
int main () {
cit ();
parc ();
f1.close ();
f2.close ();
return 0;
}