Pagini recente » Cod sursa (job #392135) | Cod sursa (job #2517781) | Cod sursa (job #3232537) | Cod sursa (job #392219) | Cod sursa (job #3232362)
#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
void calculate_logs(vector<int>& lg, int length) {
lg[1] = 0;
for(int i = 2; i <= length; ++i)
lg[i] = lg[i >> 1] + 1;
}
int main() {
int n, m, i, j, k, x, y, max_R1, max_R2;
f >> n >> m;
vector<int> lg(n + 1);
calculate_logs(lg, n);
vector<vector<int>> arr(n, vector<int>(n));
vector<vector<vector<int>>> sp_table(lg[n] + 1, vector<vector<int>>(n, vector<int>(n)));
for(i = 0; i < n; ++i)
for(j = 0; j < n; ++j)
f >> sp_table[0][i][j];
for(i = 1; i <= lg[n]; ++i)
for(j = 0; j + (1 << (i - 1)) < n; ++j)
for(k = 0; k + (1 << (i - 1)) < n; ++k) {
max_R1 = max(sp_table[i - 1][j][k], sp_table[i - 1][j][k + (1 << (i - 1))]);
max_R2 = max(sp_table[i - 1][j + (1 << (i - 1))][k], sp_table[i - 1][j + (1 << (i - 1))][k + (1 << (i - 1))]);
sp_table[i][j][k] = max(max_R1, max_R2);
}
for(i = 0; i < m; ++i) {
f >> x >> y >> k;
--x;
--y;
int log = lg[k];
max_R1 = max(sp_table[log][x][y], sp_table[log][x][y + k - (1 << log)]);
max_R2 = max(sp_table[log][x + k - (1 << log)][y], sp_table[log][x + k - (1 << log)][y + k - (1 << log)]);
g << max(max_R1, max_R2) << '\n';
}
return 0;
}