Pagini recente » Cod sursa (job #1406181) | Cod sursa (job #3137093) | Cod sursa (job #219519) | Cod sursa (job #1167052) | Cod sursa (job #1757021)
#include <iostream>
#include <cstdio>
#define MAXN 1050
using namespace std;
template<
class T,
class Compare = std::less<T>
>
struct CompDeck
{
int st, dr, k;
Compare comp;
T mat[MAXN];
int when[MAXN];
CompDeck(int sz = 5)
{
st = 0;
dr = -1;
k = sz;
comp = Compare();
}
void add(T elem, int time)
{
while (st <= dr && !comp(mat[dr], elem))
dr--;
mat[++dr] = elem;
when[dr] = time;
}
T get(int time)
{
while (time - when[st] >= k)
st++;
return mat[st];
}
void clear()
{
st = 0;
dr = -1;
}
};
int n, m, p;
int a[MAXN][MAXN];
void test()
{
CompDeck<int, std::less<int> > deck(3);
for (int i = 1; i <= 15; i++) {
deck.add(2*i, i);
cerr << deck.get(i) << " ";
}
}
void solve(int dx, int dy, int &mini, int &cate)
{
CompDeck<int, std::less<int> > minis[MAXN];
CompDeck<int, std::greater<int> > maxis[MAXN];
CompDeck<int, std::less<int> > cmi;
CompDeck<int, std::greater<int> > cma;
for (int i = 1; i <= m; i++)
{
minis[i] = CompDeck<int, std::less<int> >(dy);
maxis[i] = CompDeck<int, std::greater<int> >(dy);
}
mini = 0x3f3f3f3f;
cate = 0;
CompDeck
}
void go()
{
scanf("%d %d %d", &n, &m, &p);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &a[i][j]);
for (int i = 1; i <= p; i++)
{
int dx, dy;
scanf("%d %d", &dx, &dy);
int mini, cate, m2, c2;
solve(dx, dy, mini, cate);
solve(dy, dx, m2, c2);
if (mini == m2) printf("%d\n", cate + c2);
else if (mini < m2) printf("%d\n", cate);
else printf("%d\n" cate);
}
}
int main()
{
freopen("struti.in", "r", stdin);
freopen("struti.out", "w", stdout);
go();
return 0;
}