Pagini recente » Cod sursa (job #90299) | Cod sursa (job #46317) | Cod sursa (job #831965) | Cod sursa (job #1927912) | Cod sursa (job #2645887)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
const int LMAX = 10,
NMAX = 501;
int N, M,l;
int rmq[NMAX][NMAX][LMAX], lg[NMAX];
int main()
{
f >> N >> M;
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
f >> rmq[i][j][0];
lg[1] = 0;
for(int i = 2; i <= N; i++)
lg[i] = lg[i / 2] + 1;
for(int k = 1; (l=1<<k) <= N; k++)
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
{
rmq[i][j][k] = rmq[i][j][k - 1];
int rez1=j+(l>>1),rez2=i+(l>>1);
if(rez1 <= N)
rmq[i][j][k] = max(rmq[i][j][k], rmq[i][rez1][k - 1]);
if(rez2 <= N)
rmq[i][j][k] = max(rmq[i][j][k], rmq[rez2][j][k - 1]);
if(rez2 <= N && rez1 <= N)
rmq[i][j][k] = max(rmq[i][j][k], rmq[rez2][rez1][k - 1]);
}
while(M--)
{
int i, j, k;
f >> i >> j >> k;
int p = 1 << lg[k];
g << max(rmq[i][j][lg[k]], max(rmq[i + k - p][j][lg[k]], max(rmq[i][j + k - p][lg[k]], rmq[i + k - p][j + k - p][lg[k]]))) << '\n';
}
return 0;
}