Pagini recente » Cod sursa (job #2794810) | Cod sursa (job #1342475) | Cod sursa (job #2379803) | Cod sursa (job #2873440) | Cod sursa (job #2788935)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 502
#define LMAX 10
long int rmq[NMAX][NMAX][LMAX];
long int n,m;
long int lg[NMAX];
long int a[NMAX][NMAX];
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int main()
{
int i, j, k;
fin >> n >> m;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
fin >> a[i][j];
lg[1] = 0;
for(i = 2; i <= n; i++)
lg[i] = lg[i/2] + 1;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
rmq[i][j][0] = a[i][j];
for(k = 1; (1<<k) <= n; k++)
{
for(i = 1; i+(1<<k)-1 <= n; i++)
{
for(j = 1; j+(1<<k)-1 <= n; j++)
{
rmq[i][j][k] = max(max(rmq[i][j][k-1], rmq[i][j + (1<<(k-1))][k-1]), max(rmq[i + (1<<(k-1))][j][k-1], rmq[i + (1<<(k-1))][j + (1<<(k-1))][k-1]));
}
}
}
int x, y, l;
for(int f = 1; f <= m; f++)
{
fin >> x >> y >> k;
l = lg[k];
int diffy = y + k - (1<<l); int diffx = x + k - (1<<l);
fout << max(max(rmq[x][y][l], rmq[x][diffy][l]), max(rmq[diffx][y][l], rmq[diffx][diffy][l]));
fout << endl;
}
return 0;
}