Pagini recente » Cod sursa (job #1736752) | Cod sursa (job #1040314) | Cod sursa (job #667556) | Cod sursa (job #2006974) | Cod sursa (job #2961591)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("plantatie.in");
ofstream out ("plantatie.out");
int n;
int p[10] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
int rmq[501][501][9];
void pp ()
{
for (int k=1; p[k] <= n; k++)
{
for (int i=1; i+p[k]-1<=n; i++)
{
for (int j=1; j+p[k]-1<=n; j++)
{
rmq[i][j][k] = max({rmq[i][j][k-1], rmq[i+p[k-1]][j][k-1], rmq[i][j+p[k-1]][k-1], rmq[i+p[k-1]][j+p[k-1]][k-1]});
}
}
}
}
int query (int x1, int y1, int x2, int y2)
{
int k = __lg(x2-x1+1);
return max({rmq[x1][y1][k], rmq[x2-p[k]+1][y2-p[k]+1][k], rmq[x1][y2-p[k]+1][k], rmq[x2-p[k]+1][y1][k]});
}
int main()
{
int q;
in >> n >> q;
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
in >> rmq[i][j][0];
}
}
pp();
while (q--)
{
int x, y, k;
in >> x >> y >> k;
out << query(x, y, x+k-1, y+k-1) << '\n';
}
return 0;
}