Pagini recente » Cod sursa (job #1267739) | Cod sursa (job #2978963) | Cod sursa (job #1823961) | Cod sursa (job #2688548) | Cod sursa (job #358278)
Cod sursa(job #358278)
#include<stdio.h>
int n,m,min,nr;
short int v[1002][1002],v1[1002][1002],v2[1002][1002],deq[1002],deq2[1002];
void rez(int dx, int dy)
{
int p=1,u=0,i,j,p2=1,u2=0,a,b;
for(i=1;i<=n;i++)
{
p=1;u=0;
for(j=1;j<=m;j++)
{
while(p<=u && v[i][j]<v[i][deq[u]])
u--;
deq[++u]=j;
if(deq[p]+dx<=j)
p++;
v1[i][j]=v[i][deq[p]];
}
p=1;u=0;
for(j=1;j<=m;j++)
{
while(p<=u && v[i][j]>v[i][deq[u]])
u--;
deq[++u]=j;
if(deq[p]+dx<=j)
p++;
v2[i][j]=v[i][deq[p]];
}
}
for(j=dx;j<=m;j++)
{
p=1;u=0;
p2=1;u2=0;
for(i=1;i<=n;i++)
{
while(p<=u && v1[i][j]<v1[deq[u]][j])
u--;
deq[++u]=i;
if(deq[p]+dy<=i)
p++;
while(p2<=u2 && v2[i][j]>v2[deq2[u2]][j])
u2--;
deq2[++u2]=i;
if(deq2[p2]+dy<=i)
p2++;
a=v1[deq[p]][j];b=v2[deq2[p2]][j];
if(i>=dy)
if(b-a<min)
min=b-a,nr=1;
else
if(b-a==min)
nr++;
}
}
}
int main()
{
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
int k,dx,dy;
short int x;
char s[6000];
scanf("%d%d%d\n",&n,&m,&k);
int i,j,y;
for(i=1;i<=n;i++)
{
gets(s+1);
y=0;
for(j=1;s[j];j++)
if(s[j]==' ')
{
v[i][++y]=x;
x=0;
}
else
x=x*10+s[j]-'0';
v[i][++y]=x;
x=0;
}
while(k--)
{
scanf("%d%d",&dx,&dy);
min=1<<30;nr=0;
rez(dx,dy);
if(dx-dy)
rez(dy,dx);
printf("%d %d\n",min,nr);
}
return 0;
}