Pagini recente » Cod sursa (job #2826290) | Cod sursa (job #2661664) | Cod sursa (job #508705) | Cod sursa (job #1234141) | Cod sursa (job #1083530)
#include<fstream>
using namespace std;
#define nmaxxx 1001
ifstream fi("struti.in");
ofstream fo("struti.out");
int l1,l2,f1,f2,solll,minnn,a[nmaxxx][nmaxxx],b[nmaxxx][nmaxxx],d1[nmaxxx],d2[nmaxxx],n,m,k,i,j,x,y,c[nmaxxx][nmaxxx];
int main()
{
fi>>n>>m>>k;
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
fi>>a[i][j];
for(i=1; i<=n; ++i)
b[i][1]=c[i][1]=a[i][1];
for(int o=1; o<=k; ++o)
{
fi>>x>>y;
solll=1;
minnn=9000;
for(i=1; i<=n; ++i)
{
d1[1]=d2[1]=l1=l2=f1=f2=1;
for(j=2; j<=m; ++j)
{
while(l1>=f1&&a[i][d1[l1]]>=a[i][j])
l1--;
d1[++l1]=j;
while(d1[f1]+x<=j)
f1++;
while(l2>=f2&&a[i][d2[l2]]<=a[i][j])
l2--;
d2[++l2]=j;
while(d2[f2]+x<=j)
f2++;
b[i][j]=a[i][d2[f2]];
c[i][j]=a[i][d1[f1]];
}
}
for(j=x; j<=m; ++j)
{
d2[1]=l2=f2=d1[1]=l1=f1=1;
for(i=2; i<=n; ++i)
{
while(l1>=f1&&c[d1[l1]][j]>=c[i][j])
l1--;
d1[++l1]=i;
while(d1[f1]+y<=i)
f1++;
while(l2>=f2&&b[d2[l2]][j]<=b[i][j])
l2--;
d2[++l2]=i;
while(d2[f2]+y<=i)
f2++;
if(i>=y)
if(minnn>b[d2[f2]][j]-c[d1[f1]][j])
{
minnn=b[d2[f2]][j]-c[d1[f1]][j];
solll=1;
}
else if(minnn==b[d2[f2]][j]-c[d1[f1]][j])
solll++;
}
}
if(x!=y)
{
for(i=1; i<=n; ++i)
{
d1[1]=d2[1]=l1=l2=f1=f2=1;
for(j=2; j<=m; ++j)
{
while(l1>=f1&&a[i][d1[l1]]>=a[i][j])
l1--;
d1[++l1]=j;
while(d1[f1]+y<=j)
f1++;
while(l2>=f2&&a[i][d2[l2]]<=a[i][j])
l2--;
d2[++l2]=j;
while(d2[f2]+y<=j)
f2++;
b[i][j]=a[i][d2[f2]];
c[i][j]=a[i][d1[f1]];
}
}
for(j=y; j<=m; ++j)
{
d2[1]=l2=f2=d1[1]=l1=f1=1;
for(i=2; i<=n; ++i)
{
while(l1>=f1&&c[d1[l1]][j]>=c[i][j])
l1--;
d1[++l1]=i;
while(d1[f1]+x<=i)
f1++;
while(l2>=f2&&b[d2[l2]][j]<=b[i][j])
l2--;
d2[++l2]=i;
while(d2[f2]+x<=i)
f2++;
if(i>=x)
if(minnn>b[d2[f2]][j]-c[d1[f1]][j])
{
minnn=b[d2[f2]][j]-c[d1[f1]][j];
solll=1;
}
else if(minnn==b[d2[f2]][j]-c[d1[f1]][j])
solll++;
}
}
}
fo<<minnn<<' '<<solll<<'\n';
}
fo.close();
fi.close();
return 0;
}