Pagini recente » Cod sursa (job #2753522) | Cod sursa (job #1487412) | Cod sursa (job #2829606) | Cod sursa (job #2074681) | Cod sursa (job #2638829)
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin( "plantatie.in" );
ofstream fout( "plantatie.out" );
const int MaxN = 502;
const int logMaxN = 10;
int maxRange[logMaxN][MaxN][MaxN];
int M[MaxN][MaxN];
struct point {
int x, y;
};
static inline int query( int x1, int y1, int l ) {
point p1, p2, p3, p4;
int lgl = (int)log2( l );
p1.x = x1;
p1.y = y1;
p2.x = x1;
p2.y = y1 + l - (1 << lgl);
p3.x = x1 + l - (1 << lgl);
p3.y = y1;
p4.x = x1 + l - (1 << lgl);
p4.y = y1 + l - (1 << lgl);
return max( max( maxRange[lgl][p1.x][p1.y], maxRange[lgl][p2.x][p2.y] ), max( maxRange[lgl][p3.x][p3.y], maxRange[lgl][p4.x][p4.y] ) );
}
int main() {
int n, q, i, j, lgn, l;
fin >> n >> q;
lgn = (int)log2( n );
for ( i = 0; i < n; ++i ) {
for ( j = 0; j < n; ++j ) {
fin >> M[i][j];
}
}
for ( i = 0; i < n; ++i ) {
for ( j = 0; j < n; ++j ) {
maxRange[0][i][j] = M[i][j];
}
}
for ( l = 1; l <= lgn; ++l ) {
for ( i = 0; i + (1 << (l - 1)) < n; ++i ) {
for ( j = 0; j + (1 << (l - 1)) < n; ++j ) {
maxRange[l][i][j] = max( max( maxRange[l - 1][i][j], maxRange[l - 1][i][j + (1 << (l - 1))] ), max( maxRange[l - 1][i + (1 << (l - 1))][j], maxRange[l - 1][i + (1 << (l - 1))][j + (1 << (l - 1))] ) );
}
}
}
while ( q-- ) {
fin >> i >> j >> l;
fout << query( i - 1, j - 1, l ) << "\n";
}
fin.close();
fout.close();
return 0;
}