Pagini recente » Cod sursa (job #2825688) | Cod sursa (job #821509) | Cod sursa (job #2522158) | Cod sursa (job #3220356) | Cod sursa (job #2620902)
#include <iostream>
#include <cmath>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int rmq[10][500][500];
int main() {
int n, m;
f >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
f >> rmq[0][i][j];
for (int i = 1; (1 << i) <= n; i++) { // i <= log 2 n matrice
// Calculam pe linii maximele
for (int j = 0; j < n; j++) { // linie
for (int k = 0; k < n; k++) { // coloana
if (n <= k + (1 << (i - 1)))
rmq[i][j][k] = rmq[i - 1][j][k]; //rmq[i][j] = min(rmq[i-1][j],rmq[n-1][n-1]);
else
rmq[i][j][k] = max(rmq[i - 1][j][k], rmq[i - 1][j][k + (1 << (i - 1))]);
}
}
// Extindem de la linie la patrat
for (int j = 0; j < n; j++) // linie
for (int k = 0; k < n; k++) { // coloana
if (j+(1<<i-1)<n)
rmq[i][j][k] = max(rmq[i][j][k], rmq[i][j +(1<<(i-1))][k]); // Luam maximul maximelor de pe linii
}
}
int x, y , l;
for (int i = 0; i < m; i++) {
f >> x >> y >> l;
x--;
y--;
int k = (int)log2(l); // cea mai mare putare a lui 2 <= lungimea intervalului meu
int maxi_king = max(max(rmq[k][x][y],rmq[k][x][y+l-(1<<k)]),max(rmq[k][x+l-(1<<k)][y],rmq[k][x+l-(1<<k)][y+l-(1<<k)]));
g << maxi_king << '\n';
}
f.close();
g.close();
return 0;
}