Pagini recente » Cod sursa (job #1148230) | Cod sursa (job #630497) | Cod sursa (job #3226168) | Cod sursa (job #312453) | Cod sursa (job #2628218)
#include <stdio.h>
#include <ctype.h>
#define N 500
#define log(x) 31-__builtin_clz(x)
int read () {
int ch;
while (!isdigit(ch=getchar_unlocked()));
int ans=0;
do
ans = (ans<<3) + (ans<<1) + ch - '0';
while (isdigit(ch=getchar_unlocked()));
return ans;
}
void print (int a) {
if (a) {
print(a/10);
putchar_unlocked(a%10+'0');
}
}
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) {
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int n=read(), m=read(), i, j, k;
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
seg[0][i][j]=read();
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--) {
i=read()-1;
j=read()-1;
k=read();
lg=log(k);
print(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]));
putchar_unlocked('\n');
}
return 0;
}