Pagini recente » Cod sursa (job #3202383) | Cod sursa (job #1212771) | Cod sursa (job #2757703) | Cod sursa (job #905724) | Cod sursa (job #3293022)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
vector <int> log_2;
vector <vector<vector <int>>> rmq;
void constructie_log2(int n)
{
log_2.resize(n + 1);
log_2[1] = 0;
for (int i = 2; i <= n; i++)
{
log_2[i] = 1 + log_2[i / 2];
}
}
int maxim(int lin, int col, int lat)
{
int exp = log_2[lat];
int p = (1 << exp);
return (max(max(rmq[exp][lin - lat + p][col - lat + p], rmq[exp][lin - lat + p][col]),
max(rmq[exp][lin][col - lat + p], rmq[exp][lin][col])));
}
int main()
{
int n, q;
fin >> n >> q;
constructie_log2(n);
rmq.resize(log_2[n] + 2);
rmq[0].resize(n + 2);
for (int i = 0; i <= log_2[n]; ++i) {
rmq[i].resize(n + 1);
}
for (int i = 1; i <= n; ++i) {
rmq[0][i].resize(n + 1);
for (int j = 1; j <= n; j++) {
fin >> rmq[0][i][j];
cout << rmq[0][i][j] << " ";
}
}
int exp = 1;
int p = 2;
cout << log_2[n] << endl;
for (int exp = 1; exp <= log_2[n]; exp++)
{
// rmq[exp].resize(n + 1);
//int p = (1 << (i - 1));
for (int l = (1 << exp); l <= n; ++l) {
rmq[exp][l].resize(n + 1);
for (int c = (1 << exp); c <= n; ++c) {
p = (1 << (exp - 1));
rmq[exp][l][c] = max(max(rmq[exp - 1][l - p][c - p], rmq[exp - 1][l - p][c]), max(rmq[exp - 1][l][c - p], rmq[exp - 1][l][c]));
// p *= 2;
}
}
}
for (int i = 0; i < q; i++)
{
int l1, l2, c1, c2, k;
fin >> l1 >> c1 >> k;
cout << l1 << " " << c1 << " " << k << endl;
fout << maxim(l1, c1,k) << "\n";
}
return 0;
}