Pagini recente » Cod sursa (job #733370) | Cod sursa (job #2650904) | Cod sursa (job #971088) | Cod sursa (job #498787) | Cod sursa (job #2628214)
#include <stdio.h>
#define N 500
#define log(x) 31-__builtin_clz(x)
int max (int a, int b, int c, int d) {return a>=b && a>=c && a>=d ? a:
b>=a && b>=c && b>=d ? b:
c>=a && c>=b && c>=d ? c:
d;}
int seg[log(N)+1][N][N];
int main (void) {
FILE *fin=fopen("plantatie.in", "r"),
*fout=fopen("plantatie.out", "w");
int n, m;
fscanf(fin, "%d%d", &n, &m);
int i, j, k;
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
fscanf(fin, "%d", &seg[0][i][j]);
for (k=1; (1<<k) <= n; ++k)
for (i=0; i + (1<<k) <= n; ++i)
for (j=0; j + (1<<k) <= n; ++j)
seg[k][i][j]=max(seg[k-1][i][j], seg[k-1][i][j + (1<<k-1)], seg[k-1][i + (1<<k-1)][j], seg[k-1][i + (1<<k-1)][j + (1<<k-1)]);
int lg;
for (; m; m--) {
fscanf(fin, "%d%d%d", &i, &j, &k);
--i, --j;
lg=log(k);
fprintf(fout, "%d\n", max(seg[lg][i][j], seg[lg][i][j - (1<<lg) + k], seg[lg][i - (1<<lg) + k][j], seg[lg][i - (1<<lg) + k][j - (1<<lg) + k]));
}
return 0;
}