Pagini recente » Cod sursa (job #3356113) | Cod sursa (job #2048306) | Cod sursa (job #431037) | Cod sursa (job #1801328) | Cod sursa (job #3307660)
#include <bits/stdc++.h>
using namespace std;
int n, m, p;
vector<vector<int>> v(1005, vector<int>(1005, 0));
pair<int, int> solve(int dx, int dy)
{
int ai = INT_MAX;
int an = 0;
vector<vector<int>> xm(1005, vector<int>(1005, 0));
vector<vector<int>> xM(1005, vector<int>(1005, 0));
for(int i = 1; i <= n; i++)
{
deque<int> dm;
deque<int> dM;
for(int j = 1; j <= m; j++)
{
while(dm.size() && v[i][dm.back()] >= v[i][j])
{
dm.pop_back();
}
dm.push_back(j);
if(dm.front() == j - dy)
{
dm.pop_front();
}
while(dM.size() && v[i][dM.back()] <= v[i][j])
{
dM.pop_back();
}
dM.push_back(j);
if(dM.front() == j - dy)
{
dM.pop_front();
}
if(j >= dy)
{
xm[i][j] = v[i][dm.front()];
xM[i][j] = v[i][dM.front()];
}
}
}
for(int j = dy; j <= m; j++)
{
deque<int> dm;
deque<int> dM;
for(int i = 1; i <= n; i++)
{
while(dm.size() && xm[dm.back()][j] >= xm[i][j])
{
dm.pop_back();
}
dm.push_back(i);
if(dm.front() == i - dx)
{
dm.pop_front();
}
while(dM.size() && xM[dM.back()][j] <= xM[i][j])
{
dM.pop_back();
}
dM.push_back(i);
if(dM.front() == i - dx)
{
dM.pop_front();
}
if(i >= dx)
{
if(xM[dM.front()][j] - xm[dm.front()][j] < ai)
{
ai = xM[dM.front()][j] - xm[dm.front()][j];
an = 1;
}
else if(xM[dM.front()][j] - xm[dm.front()][j] == ai)
{
an++;
}
}
}
}
return {ai, an};
}
int main()
{
freopen("struti.in", "r", stdin);
freopen("struti.out", "w", stdout);
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m >> p;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
cin >> v[i][j];
}
}
int x, y;
while(p--)
{
cin >> x >> y;
if(x == y)
{
pair<int, int> a1 = solve(x, y);
cout << a1.first << " " << a1.second << "\n";
}
else
{
pair<int, int> a1 = solve(x, y), a2 = solve(y, x);
if(a1.first < a2.first)
{
cout << a1.first << " " << a1.second << "\n";
}
else if(a1.first > a2.first)
{
cout << a2.first << " " << a2.second << "\n";
}
else
{
cout << a1.first << " " << a1.second + a2.second << "\n";
}
}
}
}