Pagini recente » Cod sursa (job #1879828) | Cod sursa (job #2274853) | Cod sursa (job #2453809) | Cod sursa (job #1888764) | Cod sursa (job #19778)
Cod sursa(job #19778)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define MAXN 512
#define MAX_M (1 << 17)
typedef struct query { int x, y, k, ind; } query;
int N, M, A[2][MAXN][MAXN];
int ans[MAX_M];
query Q[MAX_M];
int cmp(query a, query b)
{
return a.k < b.k;
}
void solve(void)
{
int i, j, k, t, u = 0, v = 1, r;
sort(Q+1, Q+M+1, cmp);
t = 1;
while(Q[t].k == 1 && t <= M)
ans[Q[t].ind] = A[u][ Q[t].x ][ Q[t].y ], t++;
for(k = 2; k <= N; k++)
{
for(i = 1; i <= N-k+1; i++)
for(j = 1; j <= N-k+1; j++)
r = MAX(A[u][i][j], A[u][i][j+1]),
r = MAX(r, A[u][i+1][j+1]), r = MAX(r, A[u][i+1][j]),
A[v][i][j] = r;
u ^= 1, v ^= 1;
while(Q[t].k == k && t <= M)
ans[Q[t].ind] = A[u][ Q[t].x ][ Q[t].y ], t++;
}
}
void read_data(void)
{
int i, j;
scanf("%d %d\n", &N, &M);
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++)
scanf("%d ", &A[0][i][j]);
for(i = 1; i <= M; i++)
scanf("%d %d %d\n", &Q[i].x, &Q[i].y, &Q[i].k), Q[i].ind = i;
}
void write_data(void)
{
int i;
for(i = 1; i <= M; i++)
printf("%d\n", ans[i]);
}
int main(void)
{
freopen("plantatie.in", "rt", stdin);
freopen("plantatie.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}