Pagini recente » Cod sursa (job #1341612) | Cod sursa (job #3201228) | Cod sursa (job #2545166) | Cod sursa (job #2510858) | Cod sursa (job #3179259)
#include <bits/stdc++.h>
#define N 1005
using namespace std;
ifstream fin("struti.in");
ofstream fout("struti.out");
int v[N][N],E[N],n,m,q,i,j,mn,mx,w,h,t;
int d[10][N][N],f[10][N][N],l[N][N],k[N][N];
void solve(int w,int h)
{
int y,e;
//fout<<23.0*sizeof(v)/1024.0/1024.0<<'\n';
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
{
d[0][i][j]=v[i][j];
f[0][i][j]=v[i][j];
}
for(e=1;(1<<e)<=m;e++)
{
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
{
d[e][i][j]=d[e-1][i][j];
if(j+(1<<(e-1))<=m) d[e][i][j]=max(d[e][i][j],d[e-1][i][j+(1<<(e-1))]);
f[e][i][j]=f[e-1][i][j];
if(j+(1<<(e-1))<=m) f[e][i][j]=min(f[e][i][j],f[e-1][i][j+(1<<(e-1))]);
}
}
for(i=1;i<=n;++i)
for(j=1;j+w-1<=m;++j)
{
y=E[w];
l[i][j]=max(d[y][i][j],d[y][i][j+w-(1<<y)]);
k[i][j]=min(f[y][i][j],f[y][i][j+w-(1<<y)]);
}
for(i=1;i<=n;++i)
for(j=1;j+w-1<=m;++j)
{
d[0][i][j]=l[i][j];
f[0][i][j]=k[i][j];
}
for(e=1;(1<<e)<=n;++e)
{
for(j=1;j+w-1<=m;++j)
for(i=1;i<=n;++i)
{
d[e][i][j]=d[e-1][i][j];
if(i+(1<<(e-1))<=m) d[e][i][j]=max(d[e][i][j],d[e-1][i+(1<<(e-1))][j]);
f[e][i][j]=f[e-1][i][j];
if(i+(1<<(e-1))<=m) f[e][i][j]=min(f[e][i][j],f[e-1][i+(1<<(e-1))][j]);
}
}
for(i=1;i+h-1<=n;++i)
for(j=1;j+w-1<=m;++j)
{
int a,b;
y=E[h];
a=max(d[y][i][j],d[y][i+h-(1<<y)][j]);
b=min(f[y][i][j],f[y][i+h-(1<<y)][j]);
if(a-b<mn)
{
mn=a-b;
t=1;
}
else if(a-b==mn) ++t;
}
}
int main()
{
for(i=2;i<=1000;++i)
{
E[i]=1+E[i>>1];
}
fin>>n>>m>>q;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
{
fin>>v[i][j];
}
while(q--)
{
fin>>w>>h;
mn=2e9; t=0;
solve(w,h);
if(h!=w) solve(h,w);
fout<<mn<<' '<<t<<'\n';
}
return 0;
}