Pagini recente » Cod sursa (job #2930394) | Cod sursa (job #1161827) | Cod sursa (job #560786) | Cod sursa (job #3283999) | Cod sursa (job #3251706)
#include <bits/stdc++.h>
#define VMAX 100000
#define NMAX 1000
#define LOG 20
#define INF (long long)(1e9)
#define BASE 10007
#define MOD 1000000009
#define ll long long int
#define ADD 1000001
#define NIL 0
using namespace std;
ifstream fin("struti.in");
ofstream fout("struti.out");
int a[NMAX+1][NMAX+1],minc[NMAX+1][NMAX+1],maxc[NMAX+1][NMAX+1];
int n,m,q;
pair<int,int> res;
void solve(int dx,int dy)
{
for(int j=1;j<=m;j++)
{
deque<int> dq;
for(int i=n;i>=1;i--)
{
if(!dq.empty() && dq.front() > i+dx-1)
{
dq.pop_front();
}
while(!dq.empty() && a[dq.back()][j] >= a[i][j])
{
dq.pop_back();
}
dq.push_back(i);
minc[i][j] = a[dq.front()][j];
}
dq.clear();
for(int i=n;i>=1;i--)
{
if(!dq.empty() && dq.front() > i+dx-1)
{
dq.pop_front();
}
while(!dq.empty() && a[dq.back()][j] <= a[i][j])
{
dq.pop_back();
}
dq.push_back(i);
maxc[i][j] = a[dq.front()][j];
}
}
for(int i=1;i<=n-dx+1;i++)
{
deque<int> minq,maxq;
for(int j=1;j<=dy-1;j++)
{
while(!minq.empty() && minc[i][minq.back()] >= minc[i][j])
{
minq.pop_back();
}
minq.push_back(j);
while(!maxq.empty() && maxc[i][maxq.back()] <= maxc[i][j])
{
maxq.pop_back();
}
maxq.push_back(j);
}
for(int j=dy;j<=m;j++)
{
if(!minq.empty() && minq.front() < j-dy+1)
{
minq.pop_front();
}
if(!maxq.empty() && maxq.front() < j-dy+1)
{
maxq.pop_front();
}
while(!minq.empty() && minc[i][minq.back()] >= minc[i][j])
{
minq.pop_back();
}
minq.push_back(j);
while(!maxq.empty() && maxc[i][maxq.back()] <= maxc[i][j])
{
maxq.pop_back();
}
maxq.push_back(j);
int d = maxc[i][maxq.front()] - minc[i][minq.front()];
if(res.first == d)
{
res.second++;
}
else if(res.first > d)
{
res = {d,1};
}
}
}
}
int main()
{
fin >> n >> m >> q;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
fin >> a[i][j];
}
}
while(q--)
{
int dx,dy;
fin >> dx >> dy;
res = {INF,0};
solve(dx,dy);
solve(dy,dx);
if(dx==dy)
{
res.second /= 2;
}
fout << res.first << " " << res.second << "\n";
}
}