Pagini recente » Cod sursa (job #1133549) | Cod sursa (job #946465) | Cod sursa (job #219048) | Cod sursa (job #1276112) | Cod sursa (job #2037418)
#include <cstdio>
#include <deque>
#define N 1005
#define INF 8005
using namespace std;
int n, m, p, dx, dy, mat[N][N];
deque <int> mini, maxi;
int minim=INF, nr;
void citire()
{
scanf("%d %d %d\n", &n, &m, &p);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d ", &mat[i][j]);
}
void parcurgere_lung(int sti, int stj)
{
for(int i=sti;i<sti+dx;i++)
for(int j=stj;j<stj+dy;j++)
{
while(!mini.empty() && mini.back()>mat[i][j])
mini.pop_back();
mini.push_back(mat[i][j]);
while(!maxi.empty() && maxi.back()<mat[i][j])
maxi.pop_back();
maxi.push_back(mat[i][j]);
}
}
void parcurgere_latime(int sti, int stj)
{
for(int i=sti;i<sti+dy;i++)
for(int j=stj;j<stj+dx;j++)
{
while(!mini.empty() && mini.back()>mat[i][j])
mini.pop_back();
mini.push_back(mat[i][j]);
while(!maxi.empty() && maxi.back()<mat[i][j])
maxi.pop_back();
maxi.push_back(mat[i][j]);
}
}
void initializare()
{
while(!maxi.empty())
maxi.pop_back();
while(!mini.empty())
mini.pop_back();
}
void parcurgere()
{
for(int i=0;i<=n-dx;i++)
for(int j=0;j<=n-dy;j++)
{
parcurgere_lung(i, j);
// printf("%d-%d=%d\n", maxi.front(), mini.front(), maxi.front()-mini.front());
int x=maxi.front()-mini.front();
initializare();
if(x==minim)
nr++;
else
if(x<minim)
{
nr=1;
minim=x;
}
}
if(dx!=dy)
for(int i=0;i<=n-dy;i++)
for(int j=0;j<=n-dx;j++)
{
parcurgere_latime(i, j);
// printf("%d-%d=%d\n", maxi.front(), mini.front(), maxi.front()-mini.front());
int x=maxi.front()-mini.front();
initializare();
if(x==minim)
nr++;
else
if(x<minim)
{
nr=1;
minim=x;
}
}
}
int main()
{
freopen("struti.in", "r", stdin);
freopen("struti.out", "w", stdout);
citire();
for(int t=0;t<p;t++)
{
scanf("%d %d\n", &dx, &dy);
parcurgere();
printf("%d %d\n", minim, nr);
}
return 0;
}