Pagini recente » Cod sursa (job #3039036) | Cod sursa (job #805717) | Cod sursa (job #217584) | Cod sursa (job #521094) | Cod sursa (job #3124250)
#include <iostream>
#include <fstream>
#include <cmath>
std::ifstream f("plantatie.in");
std::ofstream g("plantatie.out");
int n, rmq[10][501][501], m;
int main()
{
int n = 0, m = 0, p = 1, k = 0, x, y, l, ans;
f >> n >> m;
// Citire matrice
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f >> rmq[0][i][j];
std::cout<<rmq[0][4][4];
// Determinare adancime
while (p <= n)
{
p *= 2;
k++;
}
k--;
p = 1;
// Creare Sparse Table
for (int x = 1; x <= k; x++)
{
for (int i = 1; i <= n - p * 2 + 1; i++)
for (int j = 1; j <= n - p * 2 + 1; j++)
rmq[x][i][j] = std::max(rmq[x - 1][i][j], std::max(rmq[x - 1][i + p][j + p], std::max(rmq[x - 1][i + p][j], rmq[x - 1][i][j + p])));
p *= 2;
}
// raspundere la queries
for (int i = 1; i <= m; i++)
{
f >> x >> y >> l;
p = 1;
k = 0;
while (p <= l)
{
p *= 2;
k++;
}
k--;
p /= 2;
ans = std::max(rmq[k][x][y], std::max(rmq[k][x + l - p][y + l - p], std::max(rmq[k][x + l - p][y], rmq[k][x][y + l - p])));
g << ans << '\n';
}
return 0;
}