Pagini recente » Cod sursa (job #1211590) | Cod sursa (job #1278373) | Cod sursa (job #2499967) | Cod sursa (job #1427553) | Cod sursa (job #1534225)
#include <fstream>
#include <deque>
#include <iostream>
using namespace std;
#define f first
#define s second
ifstream fin("struti.in");
ofstream fout("struti.out");
int v[1010][1010],i,j,n,m,p,k,s,mini,maxi,ans,num,x,y,pr,o;
deque < pair< int , int > > d,D;
pair<int,int> a,b;
void solve( int x, int y )
{
for( o = x ; o <= n ; o++ )
{
while( d.size() )
d.pop_back();
while( D.size() )
D.pop_back();
for( j = 1 ; j < y ; j++ )
{
for( i = o - x + 1 ; i <= o ; i++ )
{
while( d.size() && v[ d.back().f ][ d.back().s ] > v[ i ][ j ] )
{
d.pop_back();
}
d.push_back( make_pair( i , j ) );
while( D.size() && v[ D.back().f ][ D.back().s ] < v[ i ][ j ] )
{
D.pop_back();
}
D.push_back( make_pair( i , j ) );
}
}
for( j = y ; j <= m ; j++ )
{
for( i = o - x + 1 ; i <= o ; i++ )
{
while( d.size() && v[ d.back().f ][ d.back().s ] > v[ i ][ j ] )
{
d.pop_back();
}
d.push_back( make_pair( i , j ) );
while( D.size() && v[ D.back().f ][ D.back().s ] < v[ i ][ j ] )
{
D.pop_back();
}
D.push_back( make_pair( i , j ) );
while( d.front().s < j - y + 1 )
{
d.pop_front();
}
while( D.front().s < j - y + 1 )
{
D.pop_front();
}
}
pr = v[ D.front().f ][ D.front().s ] - v[ d.front().f ][ d.front().s ];
if( pr < ans )
{
ans = pr;
num = 1;
}
else if( pr == ans )
{
num++;
}
//cout<<x<<' '<<y<<' '<<pr<<' '<<ans<<' '<<num<<'\n'<<o-x + 1<<' '<<j-y+1<<' '<<o<<' '<<j<<"\n\n\n\n\n\n\n\n";
}
}
}
int main()
{
fin>>n>>m>>p;
for( i = 1 ; i <= n ; i++ )
{
for( j = 1 ; j <= m ; j++ )
{
fin>>v[ i ][ j ];
}
}
for( k = 1 ; k <= p ; k++ )
{
fin>>x>>y;
ans = 999999;
num = 0;
while( d.size() )
d.pop_back();
while( D.size() )
D.pop_back();
solve( x , y );
if( x != y ) solve( y , x );
fout<<ans<<' '<<num<<'\n';
}
return 0;
}