Pagini recente » Cod sursa (job #694722) | Cod sursa (job #300117) | Cod sursa (job #29420) | Cod sursa (job #2690693) | Cod sursa (job #594108)
Cod sursa(job #594108)
#include <iostream>
using namespace std;
#define maxN 505
#define LL long long
LL lg[maxN], RMQ[10][maxN][maxN], A[maxN][maxN];
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", &A[i][j]);
RMQ[0][i][j] = A[i][j];
}
for (int t = 1; (1 << t) <= N; ++ t)
for (int i = 1; i <= N - (1 << t) + 1; ++ i)
for (int j = 1; j <= N - (1 << t) + 1; ++ j)
{
RMQ[t][i][j] = max ( RMQ[t - 1][i][j], RMQ[t - 1][i + (1 << (t - 1))][j] );
RMQ[t][i][j] = max ( RMQ[t][i][j], RMQ[t - 1][i][j + (1 << (t - 1))] );
RMQ[t][i][j] = max ( RMQ[t][i][j], RMQ[t - 1][i + (1 << (t - 1))][j + (1 << (t - 1))] );
}
for (int i = 2; i <= N; ++ i)
lg[i] = lg[i / 2] + 1;
while (M --)
{
int x, y, k;
scanf ("%d %d %d", &x, &y, &k);
LL q = lg[k];
LL qq = k - (1 << q);
LL sol = max (RMQ[q][x][y], RMQ[q][x + qq][y]);
sol = max (sol, RMQ[q][x][y + qq]);
sol = max (sol, RMQ[q][x + qq][y + qq]);
printf ("%lld \n", sol);
}
return 0;
}