Pagini recente » Istoria paginii utilizator/dogariumihai | Monitorul de evaluare | Cod sursa (job #1383568) | Cod sursa (job #1640945) | Cod sursa (job #1609998)
#include <cstdio>
#include <algorithm>
using namespace std;
int rmq[502][502][20];
int lg[1026];
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%d", &rmq[0][i][j]);
for (int i = 2; i <= n; i++)
lg[i] = lg[i/2]+1;
for (int k = 1; k <= lg[n]; k++)
for (int i = 1; i <= n-(1<<(k-1))+1; i++)
for (int j = 1; j <= n-(1<<(k-1))+1; j++)
rmq[k][i][j] = max( max(rmq[k-1][i][j], rmq[k-1][i + (1<<(k-1))][j]),
max(rmq[k-1][i + (1<<(k-1))][j + (1<<(k-1))], rmq[k-1][i][j + (1<<(k-1))]) );
int x, y, k;
int l;
while (m--)
{
scanf("%d%d%d", &x, &y, &k);
l = lg[k];
printf("%d\n", max( max(rmq[l][x][y], rmq[l][x+k-(1<<l)][y]),
max(rmq[l][x][y+k-(1<<l)], rmq[l][x+k-(1<<l)][y+k-(1<<l)])));
}
return 0;
}