Pagini recente » Cod sursa (job #1870684) | Cod sursa (job #197730) | Cod sursa (job #2863258) | Cod sursa (job #314464) | Cod sursa (job #2798699)
#include <bits/stdc++.h>
#define min max
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
void read();
void build_table();
void solve();
int n, m, v[505][505][30];
int log(int x) {
int ans = 0, p = 1;
while (p*2 <= x) p *= 2, ans++;
return ans;
}
int main() {
read();
build_table();
solve();
return 0;
}
void solve() {
for (int q = 1; q <= m; q++) {
int x, y, l;
fin >> x >> y >> l;
int k = log(l);
int new_x = x + l - (1 << k), new_y = y + l - (1 << k);
fout << min(min(v[x][y][k], v[new_x][y][k]), min(v[new_x][new_y][k], v[x][new_y][k]));
fout << '\n';
}
}
void build_table() {
for (int k = 1; (1 << k) <= n; k++)
for (int i = 1; i <= n - (1 << k) + 1; i++)
for (int j = 1; j <= n - (1 << k) + 1; j++)
v[i][j][k] = min(min(v[i][j][k - 1], v[i + (1 << (k - 1))][j][k - 1]),
min(v[i][j + (1 << (k - 1))][k - 1],
v[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
}
void read() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
fin >> v[i][j][0];
}