Pagini recente » Cod sursa (job #2382482) | Cod sursa (job #2594002) | Cod sursa (job #1500100) | Cod sursa (job #1156991) | Cod sursa (job #1355811)
#include <fstream>
#define NMax 505
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m, rmq[NMax][NMax][11], lg, x, y, l, plog[NMax];
int getmax(int a, int b)
{
if (a > b)
return a;
return b;
}
int main()
{
f >> n >> m;
plog[1] = 0;
plog[2] = 1;
for (int i = 3; i <= n; i++)
plog[i] = plog[i / 2] + 1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f >> rmq[i][j][0];
lg = plog[n];
for (int k = 1; k <= lg; k++) {
for (int i = 1; i <= n - (1 << (k - 1)); i++) {
for (int j = 1; j <= n - (1 << (k - 1)); j++) {
rmq[i][j][k] = getmax(rmq[i][j][k - 1],
getmax(rmq[i + (1 << (k - 1))][j][k - 1],
getmax(rmq[i][j + (1 << (k - 1))][k - 1],
rmq[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1])));
}
}
}
for (int i = 1; i <= m; i++) {
f >> x >> y >> l;
lg = plog[l];
g << getmax(rmq[x][y][lg],
getmax(rmq[x + l - (1 << lg)][y][lg],
getmax(rmq[x][y + l - (1 << lg)][lg],
rmq[x + l - (1 << lg)][y + l - (1 << lg)][lg]))) << "\n";
}
}