Pagini recente » Cod sursa (job #1284471) | Cod sursa (job #312499) | Cod sursa (job #792235) | Diferente pentru implica-te/arhiva-educationala intre reviziile 133 si 132 | Cod sursa (job #2039620)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <climits>
using namespace std;
int n,m,p,lx,ly,r,mn;
int x;
pair<int, int> ma[1005][1005];
bool cmp(pair<short, short> a, pair<short, short> b)
{
return a.first<b.first;
}
void solve(int dx, int dy)
{
int ll,lc;
int lmn,lmx,lp,lm;
for(int j=0; j<n-dx+1; ++j)
{
lm=j+dx-1;
for(int li=0; li<m; ++li)
{
for(int lj=0; lj<n; ++lj)
{
lp=ma[li][lj].second;
if(j<=lp && lp<=lm)
{
ma[li][n]={ma[li][lj].first,-1};
break;
}
}
for(int lj=n-1; lj>=0; --lj)
{
lp=ma[li][lj].second;
if(j<=lp && lp<=lm)
{
ma[li][n+1]={ma[li][lj].first,-1};
break;
}
}
}
for(int i=0; i<m-dy+1; ++i)
{
lmn=INT_MAX;
lmx=INT_MIN;
ll=i+dy-1;
for(int li=i;li<=ll;++li)
{
lmn=min(lmn,ma[li][n].first);
lmx=max(lmx,ma[li][n+1].first);
}
if(lmx-lmn<mn)
{
r=1;
mn=lmx-lmn;
}
else if(lmx-lmn==mn)
r++;
}
}
}
int main()
{
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
scanf("%d %d %d", &m, &n, &p);
for(int i=0; i<m; ++i)
{
scanf("\n%d", &x);
ma[i][0]= {x,0};
for(int j=1; j<n; ++j)
{
scanf(" %d", &x);
ma[i][j]= {x,j};
}
sort(ma[i],ma[i]+n,cmp);
}
for(int i=0; i<p; ++i)
{
scanf("\n%d %d", &lx,&ly);
r=0;
mn=INT_MAX;
if(lx!=ly)
{
solve(lx,ly);
solve(ly,lx);
}
else
solve(lx,ly);
cout<<mn<<" "<<r<<"\n";
}
return 0;
}