Pagini recente » Cod sursa (job #3278756) | Cod sursa (job #1212315) | Cod sursa (job #2594382) | Cod sursa (job #568882) | Cod sursa (job #2864291)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m;
int rmq[10][503][503], p2[503];
/**p2[i] = lungimea putere a lui 2 maxima a unui interval care
are lungimea i
rmq[i][j] = pozitia minimului din intervalul[j, j + 2 ^ i - 1]
i = 0, 1, ...k, unde 2 ^ k <= p
*/
void RMQ()
{
int i, j, k, len;
p2[1] = 0;
for (i = 2; i <= n; i++)
p2[i] = 1 + p2[i / 2];
for (i = 1; (1 << i) <= n; i++)
{
len = (1 << (i - 1));
for (j = 1; j <= n - (1 << i) + 1; j++)
for (k = 1; k <= n - (1 << i) + 1; k++)
rmq[i][j][k] = max({ rmq[i - 1][j][k], rmq[i - 1][j + len][k], rmq[i - 1][j][k + len], rmq[i - 1][j + len][k + len] });
}
}
void Citire()
{
int i, j, x, y, k, len, expo;
fin >> n >> m;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
fin >> rmq[0][i][j];
RMQ();
for (i = 1; i <= m; i++)
{
fin >> x >> y >> k;
expo = p2[k];
len = (1 << expo);
fout << max({ rmq[expo][x][y], rmq[expo][x + k - len][y], rmq[expo][x][y + k - len], rmq[expo][x + k - len][y + k - len] }) << "\n";
}
}
int main()
{
Citire();
fout.close();
return 0;
}