Pagini recente » Cod sursa (job #2052396) | Cod sursa (job #2036641) | Cod sursa (job #1554337) | Cod sursa (job #1620830) | Cod sursa (job #1753625)
# include <fstream>
# define DIM 1010
# define INF 1000000000
using namespace std;
ifstream fin("struti.in");
ofstream fout("struti.out");
int v[DIM][DIM],ma[DIM][DIM],mi[DIM][DIM],fma[DIM][DIM];
int fmi[DIM][DIM],d[DIM];
int n,m,pp,i,j,p,u,dx,dy,minim,nr;
void deque(int dx,int dy){
int i,j;
for(i=1;i<=n;i++){
u=0;
p=1;
for(j=1;j<=m;j++){
while(v[i][j]>=v[i][d[u]]&&u>=p)
u--;
d[++u]=j;
if(j-d[p]==dx)
p++;
if(j>=dx)
ma[i][j]=v[i][d[p]];
}
}
for(i=1;i<=n;i++){
u=0;
p=1;
for(j=1;j<=m;j++){
while(v[i][j]<=v[i][d[u]]&&u>=p)
u--;
d[++u]=j;
if(j-d[p]==dx)
p++;
if(j>=dx)
mi[i][j]=v[i][d[p]];
}
}
for(j=dx;j<=m;j++){
u=0;
p=1;
for(i=1;i<=n;i++){
while(ma[i][j]>=ma[d[u]][j]&&u>=p)
u--;
d[++u]=i;
if(i-d[p]==dy)
p++;
if(i>=dy)
fma[i][j]=ma[d[p]][j];
}
}
for(j=dx;j<=m;j++){
u=0;
p=1;
for(i=1;i<=n;i++){
while(mi[i][j]<=mi[d[u]][j]&&u>=p)
u--;
d[++u]=i;
if(i-d[p]==dy)
p++;
if(i>=dy)
fmi[i][j]=mi[d[p]][j];
}
}
for(i=dy;i<=n;i++)
for(j=dx;j<=m;j++)
if(minim>fma[i][j]-fmi[i][j]){
minim=fma[i][j]-fmi[i][j];
nr=1;
}
else
if(minim==fma[i][j]-fmi[i][j])
nr++;
}
int main () {
fin>>n>>m>>pp;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fin>>v[i][j];
for(i=1;i<=pp;i++){
fin>>dx>>dy;
minim=INF;
deque(dx,dy);
if(dy!=dx)
deque(dy,dx);
fout<<minim<<" "<<nr<<"\n";
}
return 0;
}