Pagini recente » Cod sursa (job #2958804) | Cod sursa (job #1387494) | Cod sursa (job #977957) | Cod sursa (job #2667657) | Cod sursa (job #1106278)
#include<fstream>
#include<algorithm>
#include<string>
using namespace std;
const int NM = 1003;
const int INF = 0x3f3f3f3f;
int a[NM][NM],mx[NM][NM],mn[NM][NM],difmin,nr;
string s;
void deq(int DX,int DY,int N,int M){
int i,j,t,aij,mxij,mnij;
int m1,m2,pm1=0,pm2=0;
for(j=1;j<=M;++j)
{
m1=-INF; m2=INF;
for(i=1;i<=N;++i)
{
aij=a[i][j];
if(i<DX){
if(aij > m1){ m1=aij; pm1=i; }
if(aij < m2){ m2=aij; pm2=i; }
}
else
{
if(aij > m1){ m1=aij; pm1=i; }
if(pm1 == i-DX)
{
m1=-INF;
for(t=i-DX+1;t<=i;++t)
if(a[t][j] > m1){ m1=a[t][j]; pm1=t; }
}
if(aij < m2){ m2=aij; pm2=i; }
if(pm2 == i-DX)
{
m2=INF;
for(t=i-DX+1;t<=i;++t)
if(a[t][j] < m2){ m2=a[t][j]; pm2=t; }
}
mx[i][j]=m1;
mn[i][j]=m2;
}
}
}
for(i=DX;i<=N;++i)
{
m1=-INF; m2=INF;
for(j=1;j<=M;++j)
{
mxij=mx[i][j]; mnij=mn[i][j];
if(j<DY)
{
if(mxij > m1){ m1=mxij; pm1=j; }
if(mnij < m2){ m2=mnij; pm2=j; }
}
else
{
if(mxij > m1){ m1=mxij; pm1=j; }
if(j - DY == pm1)
{
m1=-INF;
for(t=j-DY+1;t<=j;++t)
if(mx[i][t] > m1){ m1=mx[i][t]; pm1=t; }
}
if(mnij < m2){ m2=mnij; pm2=j; }
if(j - DY == pm2)
{
m2=INF;
for(t=j-DY+1;t<=j;++t)
if(mn[i][t] < m2){ m2=mn[i][t]; pm2=t; }
}
if(m1-m2==difmin)++nr;
else
if(m1 - m2 < difmin){ difmin=m1-m2; nr=1; }
}
}
}
}
int main(){
ifstream cin("struti.in");
ofstream cout("struti.out");
int N,M,P,i,j,k,x,l,DX,DY;
cin>>N>>M>>P; getline(cin,s);
for(i=1;i<=N;++i)
{
getline(cin,s); j=k=0; l=s.length();
while(j<l){
while(j<l && s[j]!=' '){ x=(x*10)+(s[j]-'0'); ++j; }
a[i][++k]=x; x=0; ++j;
}
}
while(P--){
cin>>DX>>DY;
difmin = INF; nr=0;
deq(DX,DY,N,M);
if(DX!=DY) deq(DY,DX,N,M);
cout<<difmin<<' '<<nr<<'\n';
}
return 0;
}