Pagini recente » Cod sursa (job #2937706) | Cod sursa (job #964954) | Cod sursa (job #768936) | Cod sursa (job #938240) | Cod sursa (job #3289486)
#include <bits/stdc++.h>
using namespace std;
const string NUMEFISIER="struti";
ifstream fin(NUMEFISIER+".in");
ofstream fout(NUMEFISIER+".out");
const int Nmax=1001;
int a[Nmax][Nmax],n,m;
pair<int, int> query(int DX, int DY)
{
int difmin=INT_MAX,nr=0;
deque<pair<int, int>> dqmin,dqmax;
for(int i=1; i<=n-DX+1; i++)
{
dqmin.clear(); dqmax.clear();
for(int j=1; j<=m; j++)
{
int vmax=INT_MIN,vmin=INT_MAX;
for(int k=i; k<i+DX; k++)
{
vmax=max(vmax, a[k][j]);
vmin=min(vmin, a[k][j]);
}
while(!dqmin.empty() && dqmin.back().first>=vmin)
dqmin.pop_back();
dqmin.push_back(make_pair(vmin, j));
if(dqmin.front().second<=j-DY)
dqmin.pop_front();
while(!dqmax.empty() && dqmax.back().first<=vmax)
dqmax.pop_back();
dqmax.push_back(make_pair(vmax, j));
if(dqmax.front().second<=j-DY)
dqmax.pop_front();
if(j<DY) continue;
if(difmin>dqmax.front().first-dqmin.front().first)
{
difmin=dqmax.front().first-dqmin.front().first;
nr=1;
}
else if(difmin==dqmax.front().first-dqmin.front().first)
{
nr++;
}
}
}
if(DX!=DY)
{
for(int i=1; i<=n-DY+1; i++)
{
dqmin.clear(); dqmax.clear();
for(int j=1; j<=m; j++)
{
int vmax=INT_MIN,vmin=INT_MAX;
for(int k=i; k<i+DY; k++)
{
vmax=max(vmax, a[k][j]);
vmin=min(vmin, a[k][j]);
}
while(!dqmin.empty() && dqmin.back().first>=vmin)
dqmin.pop_back();
dqmin.push_back(make_pair(vmin, j));
if(dqmin.front().second<=j-DX)
dqmin.pop_front();
while(!dqmax.empty() && dqmax.back().first<=vmax)
dqmax.pop_back();
dqmax.push_back(make_pair(vmax, j));
if(dqmax.front().second<=j-DX)
dqmax.pop_front();
if(j<DX) continue;
if(difmin>dqmax.front().first-dqmin.front().first)
{
difmin=dqmax.front().first-dqmin.front().first;
nr=1;
}
else if(difmin==dqmax.front().first-dqmin.front().first)
{
nr++;
}
}
}
}
return make_pair(difmin, nr);
}
int main()
{
int Q;
fin>>n>>m>>Q;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
fin>>a[i][j];
int lmax,cmax;
for(int q=1; q<=Q; q++)
{
fin>>lmax>>cmax;
auto ans=query(lmax, cmax);
fout<<ans.first<<' '<<ans.second<<'\n';
}
return 0;
}