Pagini recente » Cod sursa (job #233441) | Cod sursa (job #1059435) | Cod sursa (job #268588) | Cod sursa (job #3259078) | Cod sursa (job #2790420)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
ifstream fin("struti.in");
ofstream fout("struti.out");
const int maxN = 1000;
int n, m, t, mat[maxN + 5][maxN + 5], a, b, ans = 0x3f3f3f3f, nr_ans;
deque <int> dqmax, dqmin, dqmaxi[maxN + 5], dqmini[maxN + 5];
void solve(int x, int y)
{
for(int i = 1; i <= n; i++)
{
dqmax.clear();
dqmin.clear();
for(int j = 1; j <= m; j++)
{
while(!dqmaxi[j].empty() && mat[dqmaxi[j].back()][j] < mat[i][j])
dqmaxi[j].pop_back();
dqmaxi[j].push_back(i);
if(dqmaxi[j].front() <= i - x)
dqmaxi[j].pop_front();
while(!dqmini[j].empty() && mat[dqmini[j].back()][j] > mat[i][j])
dqmini[j].pop_back();
dqmini[j].push_back(i);
if(dqmini[j].front() <= i - x)
dqmini[j].pop_front();
while(!dqmax.empty() && mat[dqmaxi[dqmax.back()].front()][dqmax.back()] < mat[dqmaxi[j].front()][j])
dqmax.pop_back();
dqmax.push_back(j);
if(dqmax.front() <= j - y)
dqmax.pop_front();
while(!dqmin.empty() && mat[dqmini[dqmin.back()].front()][dqmin.back()] > mat[dqmini[j].front()][j])
dqmin.pop_back();
dqmin.push_back(j);
if(dqmin.front() <= j - y)
dqmin.pop_front();
int val = mat[dqmaxi[dqmax.front()].front()][dqmax.front()] - mat[dqmini[dqmin.front()].front()][dqmin.front()];
if(j >= y && i >= x)
{
if(val == ans)
nr_ans++;
if(val < ans)
{
ans = val;
nr_ans = 1;
}
}
/// fout << i << ' ' << j << " " << dqmaxi[dqmax.front()].front() << ' ' << dqmax.front() << " " << dqmini[dqmin.front()].front() << ' ' << dqmin.front() << " " << val << '\n';
}
}
}
int main()
{
ios::sync_with_stdio(false);
fin >> n >> m >> t;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
fin >> mat[i][j];
for(int i = 1; i <= t; i++)
{
fin >> a >> b;
for(int j = 1; j <= m; j++)
{
dqmaxi[j].clear();
dqmini[j].clear();
}
solve(a, b);
if(b != a)
{
for(int j = 1; j <= m; j++)
{
dqmaxi[j].clear();
dqmini[j].clear();
}
solve(b, a);
}
fout << ans << ' ' << nr_ans << '\n';
ans = 0x3f3f3f3f;
nr_ans = 0;
}
return 0;
}