Pagini recente » Cod sursa (job #1094329) | Cod sursa (job #2963613) | Cod sursa (job #387461) | Cod sursa (job #2216880) | Cod sursa (job #2755147)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
const int NMAX=501;
long int rmq[11][NMAX][NMAX];
long int n,m;
int max4(int a, int b, int c, int d)
{
return max(max(a,b),max(c,d));
}
void precalc()
{
for (int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f>>rmq[0][i][j];
long int l;
for (int i=1; (1 << i) <=n;i++)
for (int j=1;j <= n - (1 << i)+1;j++)
for(int k=1;k<=n-(1<<i)+1;k++)
{
l=1<<(i-1);
rmq[i][j][k]= max4( rmq[i-1][j][k] ,
rmq[i-1][j][k+l],
rmq[i-1][j+l][k],
rmq[i-1][j+l][k+l] );
}
}
int query(int x,int y, int k)
{ int m=0;
while(1<<(m+1)<=k)
m++;
int l=1<<m;
return max4(rmq[m][x][y],
rmq[m][x][y+k-l]
,rmq[m][x+k-l][y],
rmq[m][x+k-l][y+k-l]);
}
int main()
{
f>>n>>m;
precalc();
int x,y,k;
for (int i=1;i<=m;i++)
{
f>>x>>y>>k;
g<<query(x,y,k)<<'\n';
}
return 0;
}