Pagini recente » Cod sursa (job #328120) | Cod sursa (job #427607) | Cod sursa (job #1772407) | Cod sursa (job #2135774) | Cod sursa (job #2595123)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int NMAX = 500;
const int MMAX = 75000;
int n, m, rmq[20][NMAX + 1][NMAX + 1];
int mat[NMAX + 1][NMAX + 1];
int Log2[NMAX + 1];
int maxi( int a, int b, int c, int d ) {
a = max( a, b );
a = max( a, c );
a = max( a, d );
return a;
}
void build_rmq( ) {
for( int i = 2; i <= NMAX; i ++ )
Log2[i] = Log2[i / 2] + 1;
for( int i = 1; i <= n; i ++ )
for( int j = 1; j <= n; j ++ )
rmq[0][i][j] = mat[i][j];
for( int k = 1; k <= Log2[n]; k ++ ) {
int p = 1<<(k - 1);
for( int i = 1<<k; i <= n; i ++ ) {
for( int j = 1<<k; j <= n; j ++ ) {
rmq[k][i][j] = maxi( rmq[k - 1][i][j], rmq[k - 1][i - p][j], rmq[k - 1][i][j - p], rmq[k - 1][i - p][j - p] );
}
}
}
}
int query( int i, int j, int k ) {
int i1, i2, j1, j2;
i1 = i;
j1 = j;
i2 = i + k - 1;
j2 = j1 + k - 1;
int p = Log2[k];
int l = (1<<p) - 1;
return maxi( rmq[p][i2][j2], rmq[p][i1 + l][j2], rmq[p][i2][j1 + l], rmq[p][i1 + l][j1 + l] );
}
int main() {
fin>>n>>m;
for( int i = 1; i <= n; i ++ )
for( int j = 1; j <= n; j ++ )
fin>>mat[i][j];
build_rmq();
for( int i = 1; i <= m; i ++ ) {
int a, b, c;
fin>>a>>b>>c;
fout<<query(a, b, c)<<"\n";
}
return 0;
}