Pagini recente » Cod sursa (job #1640804) | Cod sursa (job #2860156) | Cod sursa (job #1037543) | Cod sursa (job #2742646) | Cod sursa (job #175370)
Cod sursa(job #175370)
#include <cstdio>
#include <iostream>
#define DIM 550
#define maxim(a, b) ((a) > (b) ? (a) : (b))
using namespace std;
int N, M, A[DIM][DIM], i, j, k, log[DIM], rmq[DIM][DIM][20], x, y, lg;
int main()
{
FILE *fin = fopen("plantatie.in", "r");
FILE *fout = fopen("plantatie.out", "w");
fscanf(fin, "%d%d", &N, &M);
for (i = 1; i <= N; ++i)
for (j = 1; j <= N; ++j)
{
fscanf(fin, "%d", &A[i][j]);
rmq[i][j][0] = A[i][j];
}
for (i = 2; i <= N; ++i)
log[i] = log[i / 2] + 1;
for (k = 1; (1 << k) <= N; ++k)
for (i = 1; i + (1 << (k - 1)) <= N; ++i)
for (j = 1; j + (1 << (k - 1)) <= N; ++j)
{
x = i + (1 << (k-1));
y = j + (1 << (k-1));
rmq[i][j][k] = maxim(maxim(rmq[i][j][k-1], rmq[i][y][k-1]), maxim(rmq[x][j][k-1], rmq[x][y][k-1]));
}
for (; M; --M)
{
fscanf(fin, "%d%d%d", &i, &j, &k);
lg = log[k];
x = i + k - (1 << lg);
y = j + k - (1 << lg);
fprintf(fout, "%d\n", maxim(maxim(rmq[i][j][lg], rmq[x][j][lg]), maxim(rmq[i][y][lg], rmq[x][y][lg])));
}
fclose(fin);
fclose(fout);
return 0;
}