Pagini recente » Cod sursa (job #1751713) | Cod sursa (job #2833333) | Cod sursa (job #1861583) | Cod sursa (job #2726956) | Cod sursa (job #2898139)
#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m, L, dk, lat, x;
int expo[505];
int rmq[10][505][505];
int main() {
f >> n >> m;
expo[1]=0;
for(int i = 2; i <= n; ++i) {
expo[i] = 1 + expo[i / 2];
}
int val;
for (int i = 1; i <= n; ++i) {
for(int j = 1; j <= n; ++j) {
f >> val;
rmq[0][i][j] = val;
}
}
for(int k = 1; k <= expo[n]; ++k) {
dk = 1 << k;
L = 1 << (k - 1);
for (int i = 1; i + L <= n; ++i) {
for (int j = 1; j + L <= n; ++j) {
rmq[k][i][j] = max({rmq[k-1][i][j], rmq[k-1][i][j+L], rmq[k-1][i+L][j], rmq[k-1][i+L][j+L]});
}
}
}
int i, j, k;
while(m--) {
f >> i >> j >> lat;
if(lat == 1) {
g << rmq[0][i][j] << '\n';
}
else {
dk = 1 << expo[lat];
k = expo[lat];
x = max({rmq[k][i][j], rmq[k][i][j+lat-dk], rmq[k][i+lat-dk][j], rmq[k][i+lat-dk][j+lat-dk]});
g << x << '\n';
}
}
}