Pagini recente » Cod sursa (job #2415417) | Cod sursa (job #2029084) | Cod sursa (job #2308149) | Cod sursa (job #398834) | Cod sursa (job #2573546)
#include <bits/stdc++.h>
#define Dim 1001
using namespace std;
ifstream f("struti.in");
ofstream g("struti.out");
int N,M,P,A[Dim][Dim],maxim,minim;
struct info
{
int mini,maxi;
}rmq[12][12][Dim][Dim];
int Solve(int i,int j,int x,int y)
{
int x1=i,x2=i+x-1,y1=j,y2=j+y-1;
int difr=log2(x2-x1+1),difc=log2(y2-y1+1);
int maxim1,maxim2,minim1,minim2;
maxim1=max(rmq[difr][difc][x1][y1].maxi,rmq[difr][difc][x2-(1<<difr)+1][y1].maxi);
maxim2=max(rmq[difr][difc][x1][y2-(1<<difc)+1].maxi,
rmq[difr][difc][x2-(1<<difr)+1][y2-(1<<difc)+1].maxi);
minim1=max(rmq[difr][difc][x1][y1].mini,rmq[difr][difc][x2-(1<<difr)+1][y1].mini);
minim2=max(rmq[difr][difc][x1][y2-(1<<difc)+1].mini,
rmq[difr][difc][x2-(1<<difr)+1][y2-(1<<difc)+1].mini);
maxim=max(maxim1,maxim2);
minim=min(minim1,minim2);
}
int main()
{
int x,y;
f>>N>>M>>P;
int dimN=log2(N),dimM=log2(M);
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++) f>>A[i][j];
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
rmq[0][0][i][j]={A[i][j],A[i][j]};
for(int jc=1;jc<=dimM;jc++)
for(int j=1;j+(1<<jc)-1<=M;j++)
{
rmq[0][jc][i][j].mini=min(rmq[0][jc-1][i][j].mini,rmq[0][jc-1][i][j+(1<<(jc-1))].mini);
rmq[0][jc][i][j].maxi=max(rmq[0][jc-1][i][j].maxi,rmq[0][jc-1][i][j+(1<<(jc-1))].maxi);
}
}
for(int jr=1;jr<=dimN;jr++)
for(int i=1;i+(1<<jr)-1<=N;i++)
for(int jc=0;jc<=dimM;jc++)
for(int j=1;j+(1<<jc)-1<=M;j++)
{
rmq[jr][jc][i][j].mini=min(rmq[jr-1][jc][i][j].mini,rmq[jr-1][jc][i+(1<<(jr-1))][j].mini);
rmq[jr][jc][i][j].maxi=max(rmq[jr-1][jc][i][j].maxi,rmq[jr-1][jc][i+(1<<(jr-1))][j].maxi);
}
for(int i=1;i<=P;i++)
{
f>>x>>y;
int ans=9000,cnt=0;
for(int i=1;i+x-1<=N;i++)
for(int j=1;j+y-1<=M;j++)
{
Solve(i,j,x,y);
if(maxim-minim < ans)
{
ans=maxim-minim;
cnt=1;
}
else
if(maxim-minim==ans) cnt++;
}
if(x!=y)
{
for(int i=1;i+x-1<=N;i++)
for(int j=1;j+y-1<=M;j++)
{
Solve(i,j,x,y);
if(maxim-minim < ans)
{
ans=maxim-minim;
cnt=1;
}
else
if(maxim-minim==ans) cnt++;
}
}
g<<ans<<' '<<cnt<<'\n';
}
return 0;
}