Pagini recente » Cod sursa (job #36381) | Cod sursa (job #2937353) | Cod sursa (job #241759) | Cod sursa (job #2104878) | Cod sursa (job #1042747)
#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)
cin>>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;
cin>>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;
}