Pagini recente » Cod sursa (job #2670923) | Cod sursa (job #119767) | Cod sursa (job #1843332) | Cod sursa (job #216141) | Cod sursa (job #2981816)
/*
"TLE is like the wind, always by my side"
- Yasuo - 2022 -
*/
#include <bits/stdc++.h>
#define short int int
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
using namespace std;
short int a[1001][1001];
deque <short int> dq[1001];
deque <short int> dq2[1001];
deque <short int> dqmin;
deque <short int> dqmax;
deque <short int> dqminindice;
deque <short int> dqmaxindice;
short int n,m,p,i,j,lat1,lat2,mi,ap,k;
void solve (int l1, int l2)
{
for (i=1; i<=max(n,m); i++)
{
dq[i].clear();
dq2[i].clear();
dqmin.clear();
dqminindice.clear();
dqmax.clear();
dqmaxindice.clear();
}
for (j=1; j<=m; j++)
{
dqmin.clear();
dqminindice.clear();
dqmax.clear();
dqmaxindice.clear();
for (i=1; i<=n; i++)
{
while (!dq[i].empty() && j-dq[i].front()>=l1)
dq[i].pop_front();
while (!dq2[i].empty() && j-dq2[i].front()>=l1)
dq2[i].pop_front();
while (!dq[i].empty() && a[i][j]<a[i][dq[i].back()])
dq[i].pop_back();
while (!dq2[i].empty() && a[i][j]>a[i][dq2[i].back()])
dq2[i].pop_back();
dq[i].push_back(j);
dq2[i].push_back(j);
if (j>=l1)
{
while (!dqmin.empty() && i-dqminindice.front()>=l2)
{
dqmin.pop_front();
dqminindice.pop_front();
}
while (!dqmax.empty() && i-dqmaxindice.front()>=l2)
{
dqmax.pop_front();
dqmaxindice.pop_front();
}
while (!dqmin.empty() && a[i][dq[i].front()]<a[dqminindice.back()][dqmin.back()])
{
dqmin.pop_back();
dqminindice.pop_back();
}
while(!dqmax.empty() && a[i][dq2[i].front()]>a[dqmaxindice.back()][dqmax.back()])
{
dqmax.pop_back();
dqmaxindice.pop_back();
}
dqmin.push_back(dq[i].front());
dqminindice.push_back(i);
dqmax.push_back(dq2[i].front());
dqmaxindice.push_back(i);
if (i>=l2)
{
if (a[dqmaxindice.front()][dqmax.front()]-a[dqminindice.front()][dqmin.front()]<mi)
{
mi=a[dqmaxindice.front()][dqmax.front()]-a[dqminindice.front()][dqmin.front()];
ap=0;
}
if (a[dqmaxindice.front()][dqmax.front()]-a[dqminindice.front()][dqmin.front()]==mi)
ap++;
}
}
}
}
}
int main()
{
ifstream fin("struti.in");
ofstream fout("struti.out");
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
fin >> n >> m >> p;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
fin >> a[i][j];
}
}
for (k=1; k<=p; k++)
{
ap=0;
mi=8001;
fin >> lat1 >> lat2;
solve(lat1,lat2);
if (lat1!=lat2)
solve(lat2,lat1);
fout << mi << " " << ap << "\n";
}
}