Pagini recente » Cod sursa (job #1959896) | Cod sursa (job #62599) | Cod sursa (job #877377) | Cod sursa (job #259651) | Cod sursa (job #2567215)
#include <fstream>
#include <iostream>
using namespace std;
const int N = 505;
int a[N][N], rmq[10][N][N], exp[N], n;
void Build_RMQ()
{
for (int i = 2; i <= n; i++)
exp[i] = exp[i >> 1] + 1;
for (int k = 1; k <= exp[n]; k++)
for (int i = 1; i <= n - (1 << k) + 1; i++)
for (int j = 1; j <= n - (1 << k) + 1; j++)
rmq[k][i][j] = max(max(max(rmq[k - 1][i][j], rmq[k - 1][i + (1 << (k - 1))][j]),
rmq[k - 1][i][j + (1 << (k - 1))]),
rmq[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]);
}
void Read ()
{
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int q;
fin >> n >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
fin >> a[i][j];
rmq[0][i][j] = a[i][j];
}
Build_RMQ();
while (q--)
{
int x, y, k;
fin >> x >> y >> k;
int l = exp[k];
fout << max(max(max(rmq[l][x][y], rmq[l][x + k - (1 << l)][y]), rmq[l][x][y + k - (1 << l)]),
rmq[l][x + k - (1 << l)][y + k - (1 << l)]) << "\n";
}
fout.close();
}
int main()
{
Read();
return 0;
}