Pagini recente » Cod sursa (job #3205216) | Cod sursa (job #1016767) | Cod sursa (job #2429595) | Cod sursa (job #182245) | Cod sursa (job #1456096)
#include <cstdio>
#include <algorithm>
#define NMAX 507
#define inf 1000000023
using namespace std;
FILE *fin, *fout;
int log(int x)
{
int sol = 1, ans = 0;
for(;sol <= x;ans++) sol<<=1;
sol>>=1;
ans--;
return ans;
}
int rmq[NMAX][NMAX][107], n, m, q1, q2, q3;
int query(int x, int y, int p)
{
int lg = log(p), ans;
ans = max(max(rmq[x][y][lg], rmq[x + p - (1<<lg)][y + p - (1<<lg)][lg]), max(rmq[x + p - (1<<lg)][y][lg], rmq[x][y + p - (1<<lg)][lg]));
return ans;
}
int main()
{
fin = freopen("plantatie.in", "r", stdin);
fout = freopen("plantatie.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i<= n; i++)
{
for(int j = 1; j<= n; j++)
{
scanf("%d", &rmq[i][j][0]);
}
}
for(int k = 1; k<= log(n); k++)
{
for(int i = 1; i<= n - (1<<k) + 1; i++)
{
for(int j = 1; j<= n - (1<<k) + 1; j++)
{
rmq[i][j][k] = max(max(rmq[i+(1<<(k-1))][j][k-1], rmq[i][j+(1<<(k-1))][k-1]), max(rmq[i][j][k-1], rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
}
}
}
for(int i = 1; i<= m; i++)
{
scanf("%d%d%d", &q1, &q2, &q3);
printf("%d\n", query(q1, q2, q3));
}
fclose(fin);
fclose(fout);
return 0;
}