Pagini recente » Cod sursa (job #2585562) | Cod sursa (job #1593328) | Cod sursa (job #2297761) | Cod sursa (job #1334936) | Cod sursa (job #1755911)
/// RMQ
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int nmx = 502;
int n,m;
int dp[nmx][nmx][8];
int max4(int v1, int v2, int v3, int v4)
{
return max(max(v1,v2),max(v3,v4));
}
void citire()
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i)
for(int j = 1 ; j <= n; ++j)
scanf("%d", &dp[i][j][0]);
}
void range_minimum_query()
{
for(int pt = 1; (1 << pt) <= n + 1; ++pt)
for(int i = 1; i + (1 << pt) <= n + 1; ++i)
for(int j = 1; j + (1 << pt) <= n + 1; ++j)
dp[i][j][pt] = max4(dp[i][j][pt-1],dp[i][j+(1 << (pt - 1))][pt-1],dp[i + (1 << (pt - 1))][j][pt-1],dp[i + (1 << (pt - 1))][j + (1 << (pt - 1))][pt - 1]);
}
void queries()
{
for(int i = 1; i <= m; ++i)
{
int x,y,k;
scanf("%d %d %d", &x, &y, &k);
int xf = x + k, yf = y + k;
int put = log2(k);
int pt2 = (1 << put);
printf("%d\n", max4(dp[x][y][put],dp[x][yf-pt2][put],dp[xf-pt2][y][put],dp[xf-pt2][yf-pt2][put]));
}
}
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
citire();
range_minimum_query();
queries();
return 0;
}