Pagini recente » Cod sursa (job #3309681) | Cod sursa (job #3305330) | Cod sursa (job #3330960) | Cod sursa (job #1557554) | Cod sursa (job #3358803)
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int n, Q;
int mat[N][N];
int rmq[10][10][N][N];
int main() {
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
cin >> n >> Q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> mat[i][j];
// base case
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
rmq[0][0][i][j] = mat[i][j];
int LOG = log2(n);
// build
for (int l = 0; l <= LOG; l++) {
for (int k = 0; k <= LOG; k++) {
if (l == 0 && k == 0) continue;
for (int i = 1; i + (1 << l) - 1 <= n; i++) {
for (int j = 1; j + (1 << k) - 1 <= n; j++) {
if (l == 0) {
rmq[l][k][i][j] = min(
rmq[l][k - 1][i][j],
rmq[l][k - 1][i][j + (1 << (k - 1))]
);
}
else if (k == 0) {
rmq[l][k][i][j] = min(
rmq[l - 1][k][i][j],
rmq[l - 1][k][i + (1 << (l - 1))][j]
);
}
else {
rmq[l][k][i][j] = min({
rmq[l - 1][k - 1][i][j],
rmq[l - 1][k - 1][i + (1 << (l - 1))][j],
rmq[l - 1][k - 1][i][j + (1 << (k - 1))],
rmq[l - 1][k - 1][i + (1 << (l - 1))][j + (1 << (k - 1))]
});
}
}
}
}
}
while (Q--) {
int x, y, k;
cin >> x >> y >> k;
int l = log2(k);
int dx = k - (1 << l);
int dy = k - (1 << l);
int ans = min({
rmq[l][l][x][y],
rmq[l][l][x + dx][y],
rmq[l][l][x][y + dy],
rmq[l][l][x + dx][y + dy]
});
cout << ans << "\n";
}
}