Pagini recente » Cod sursa (job #630640) | Cod sursa (job #1965600) | Cod sursa (job #2598981) | Cod sursa (job #2070006) | Cod sursa (job #1044664)
#include<iostream>
#include<cstdio>
using namespace std;
int maxpow[505], d[9][505][505];
void precalculez()
{
maxpow[1] = 0;
for(int i = 2; i <= 505; i ++)
maxpow[i]=maxpow[i/2] + 1;
}
int main()
{
FILE *fin, *fout;
fin = fopen("plantatie.in", "r");
fout=fopen("plantatie.out", "w");
int i, n, m, j, l, lg, x, y, h;
precalculez();
fscanf(fin, "%d %d", &n, &m);
for(i = 1; i <= n; i ++)
for(j = 1; j <= n; j ++)
fscanf(fin, "%d", &d[0][i][j]);
lg=maxpow[n];
int maxim;
for(l = 1; l <= lg; l ++)
for(i = 1; i <= n; i ++)
for(j = 1; j <= n; j ++)
{
d[l][i][j]=d[l-1][i][j];
d[l][i][j]=max(d[l - 1][i][j], d[l - 1][i + (1<<(l - 1))][j]);
d[l][i][j]=max(d[l][i][j], d[l - 1][i][j + (1 << (l - 1))]);
d[l][i][j]=max(d[l][i][j], d[l - 1][i + (1 << (l - 1))][j + (1 << ( l - 1))]);
}
for(i = 0 ; i < m; i ++)
{
fscanf(fin, "%d %d %d", &x, &y, &h);
maxim=max(d[maxpow[h]][x][y], d[maxpow[h]][ x + h - (1<<maxpow[h]) ][j]);
maxim=max(maxim, d[maxpow[h]][x][ y + h -(1 << maxpow[h])]);
maxim=max(maxim, d[maxpow[h]][x + h - (1<<maxpow[h])][y + h - (1<<maxpow[h])] );
fprintf(fout, "%d\n", maxim);
}
}