Pagini recente » Cod sursa (job #2392632) | Cod sursa (job #811768) | Cod sursa (job #63894) | Cod sursa (job #1255358) | Cod sursa (job #1042776)
#include<cstdio>
#include<iostream>
using namespace std;
#define maxn 501
int mat[maxn][maxn], putere[maxn];
int RMQ[10][maxn][maxn];
int main() {
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int n, q;
cin>>n>>q;
for( int i = 0; i < n; ++i) {
for( int j = 0; j < n; ++j)
scanf("%d", &RMQ[0][i][j]);
}
for( int l = 1; (1<<l) <= n; ++l)
for( int i = 0; i < n; ++i)
for( int j = 0; j < n; ++j) {
RMQ[l][i][j] = RMQ[l-1][i][j];
int power = ( 1<<(l-1));
if( i + power < n) {
RMQ[l][i][j] = max(RMQ[l][i][j], RMQ[l-1][ i + power][j]);
if( j + power < n)
RMQ[l][i][j] = max( RMQ[l][i][j], max( RMQ[l-1][i][j + power], RMQ[l-1][i+power][j+power]));
}
}
putere[1] = 0;
for( int i = 2; i <= 500; ++i) {
putere[i] = putere[i-1] + !(i &(i-1));
// cout<<i<<" "<<putere[i]<<endl;
}
while(q) {
int x,y,l;
scanf("%d %d %d", &x,&y,&l);
x--; y--;
int max_pow = putere[l];
int power = ( 1<< max_pow);
int rez = max( RMQ[max_pow][x][y], RMQ[max_pow][x][y+l-power]);
rez = max ( rez, max( RMQ[max_pow][ x+l- power][y], RMQ[max_pow][x+l-power][y+l-power]));
cout<<rez<<endl;
q--;
}
return 0;
}