Pagini recente » Cod sursa (job #998488) | Cod sursa (job #96242) | Cod sursa (job #676409) | Cod sursa (job #637357) | Cod sursa (job #2120729)
#include <fstream>
#include <deque>
using namespace std;
deque <int> Max;
deque <int> Min;
ifstream f("struti.in");
ofstream g("struti.out");
int n,m,i,j,a[1001][1001],sol,nr,t;
void solve(int x,int y) {
int i,j,jj,vmax,vmin,sol,nr;
for (jj=1;jj<=m-y+1;++jj) {
for (i=1;i<=n;++i) {
vmax=0,vmin=8001;
for (j=jj;j<=jj+y-1;++j) {
vmax=max(vmax,a[i][j]);
vmin=min(vmin,a[i][j]);
}
while (!Max.empty() && vmax>=Max.back())
Max.pop_back();
while (!Min.empty() && vmin<=Min.back())
Min.pop_back();
Max.push_back(vmax);
Min.push_back(vmin);
if (i>=x) {
if (sol>Max.front()-Min.front())
sol=Max.front()-Min.front(),nr=1;
if (sol==Max.front()-Min.front()) ++sol;
}
if (Max.size()==x) Max.pop_front();
if (Min.size()==x) Min.pop_front();
}
Max.clear();
Min.clear();
}
}
int main()
{ int dx,dy,i,j;
f>>n>>m>>t;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
f>>a[i][j];
for (; t; --t) {
f>>dx>>dy;
sol=8001;nr=0;
solve(dx,dy);
if (dx!=dy) solve(dy,dx);
g<<sol<<" "<<nr<<'\n';
}
f.close();
g.close();
return 0;
}