Pagini recente » Cod sursa (job #3280303) | Cod sursa (job #2696609) | Cod sursa (job #2579884) | Cod sursa (job #250202) | Cod sursa (job #2570787)
//Iar pentru Vamy
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int NAX = 1010;
ifstream f("struti.in");
ofstream g("struti.out");
int t, n, m;
int ma[ NAX ][ NAX ];
int maxi[ NAX ][ NAX ], mini[ NAX ][ NAX ], ras, c_ras;
int dx, dy;
void fa(int dx, int dy)
{
deque<int>Qmin, Qmax;
for(int i = 1 ; i <= n ; ++i)
{
for(int j = 1 ; j <= m ; ++j)
{
while(!Qmin.empty() && ma[ i ][ j ] <= ma[ i ][ Qmin.back()])
Qmin.pop_back();
Qmin.push_back(j);
if(j >= dx )
{
if(j - dx == Qmin.front())
{
Qmin.pop_front();
}
mini[ i ][ j ] = ma[ i ][ Qmin.front()];
}
while(!Qmax.empty() && ma[ i ][ j ] >= ma[ i ][ Qmax.back()])
Qmax.pop_back();
Qmax.push_back(j);
if(j >= dx )
{
if(j - dx == Qmax.front())
Qmax.pop_front();
maxi[ i ][ j ] = ma[ i ][ Qmax.front()];
}
}
Qmax.clear();
Qmin.clear();
}
for(int j = dx ; j <= m ; ++j)
{
for(int i = 1 ; i <= n ; ++i)
{
while(!Qmin.empty() && mini[ i ][ j ] <= mini[ Qmin.back() ][ j ])
Qmin.pop_back();
Qmin.push_back(i);
while(!Qmax.empty() && maxi[ i ][ j ] >= maxi[ Qmax.back() ][j])
Qmax.pop_back();
Qmax.push_back(i);
if(i >= dy )
{
if(i - dy == Qmin.front())
Qmin.pop_front();
if(i - dy == Qmax.front())
Qmax.pop_front();
int tine = maxi[ Qmax.front()][j] - mini[ Qmin.front() ][ j ];
if(tine< ras)
{
ras = tine;
c_ras = 1;
} else if( tine == ras )
c_ras++;
}
}
Qmax.clear();
Qmin.clear();
}
}
int main()
{
f >> n >> m >> t;
for(int i = 1 ; i <= n ; ++i)
for(int j = 1 ; j <= m ; ++j)
f >> ma[ i ][ j ];
while(t--)
{
f >> dx >> dy;
ras = 1 << 30;
fa(dx, dy);
if(dx != dy)
fa(dy, dx);
g << ras << ' ' << c_ras << '\n';
}
}