Pagini recente » Cod sursa (job #2392794) | Cod sursa (job #126511) | Cod sursa (job #322824) | Cod sursa (job #2841994) | Cod sursa (job #2480593)
#include <fstream>
using namespace std;
const int N = 500;
int MAX(int a, int b, int c, int d){
return max(a, max(b, max(c, d)));
}
ifstream in ("plantatie.in");
ofstream out ("plantatie.out");
int rmq[10][5 + N][5 + N];
int log[5 + N];
int main()
{
//freopen("plantatie.in", "r", stdin);
//freopen("plantatie.out", "w", stdout);
int n, m, i, j;
in >> n >> m;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++){
in >> rmq[0][i][j];
}
}
log[1] = 0;
for(i = 2; i <= n; i++) log[i] = log[i >> 1] + 1;
for(int x = 1; x <= log[n]; x++){
int lung = 1 << x;
for(i = 1; i + lung <= n + 1; i++){
for(j = 1; j + lung <= n + 1; j++){
rmq[x][i][j] = MAX(rmq[x-1][i][j], rmq[x-1][i + lung / 2][j], rmq[x-1][i][j + lung / 2], rmq[x-1][i + lung / 2][j + lung / 2]);
}
}
}
for(i = 1; i <= m; i++){
int p, q, k, x;
int p0, q0;
in >> p >> q >> k;
x = log[k];
int lung = 1 << x;
p0 = p + k - 1;
q0 = q + k - 1;
out << MAX(rmq[x][p][q], rmq[x][p][q0 - lung + 1], rmq[x][p0 - lung + 1][q], rmq[x][p0 - lung + 1][q0 - lung + 1]) << '\n';
}
return 0;
}