Pagini recente » Cod sursa (job #3174312) | Cod sursa (job #867220) | Cod sursa (job #2174031) | Cod sursa (job #1105696) | Cod sursa (job #842121)
Cod sursa(job #842121)
#include <fstream>
using namespace std;
const char InFile[]="plantatie.in";
const char OutFile[]="plantatie.out";
const int MaxN=505;
const int MaxSqrN=MaxN*MaxN;
const int LogMaxSqrN=11;
ifstream fin(InFile);
ofstream fout(OutFile);
int rmq[LogMaxSqrN][MaxN][MaxN],N,M,lg[MaxN],x,y,l;
int main()
{
fin>>N>>M;
for(register int i=1;i<=N;++i)
{
for(register int j=1;j<=N;++j)
{
fin>>rmq[0][i][j];
}
}
for(register int i=2;i<=N;++i)
{
lg[i]=lg[i>>1]+1;
}
int p=1;
for(register int k=1;k<LogMaxSqrN;++k,p<<=1)
{
for(register int i=1;i<=N;++i)
{
for(register int j=1;j<=N;++j)
{
rmq[k][i][j]=rmq[k-1][i][j];
if(i+p<=N)
{
rmq[k][i][j]=max(rmq[k][i][j],rmq[k-1][i+p][j]);
}
if(j+p<=N)
{
rmq[k][i][j]=max(rmq[k][i][j],rmq[k-1][i][j+p]);
}
if(i+p<=N && j+p<=N)
{
rmq[k][i][j]=max(rmq[k][i][j],rmq[k-1][i+p][j+p]);
}
}
}
}
for(register int i=0;i<M;++i)
{
fin>>x>>y>>l;
int k=(1<<lg[l]);
int x2=x+l;
int y2=y+l;
int sol=max(rmq[lg[l]][x][y],rmq[lg[l]][x2-k][y]);
sol=max(sol,rmq[lg[l]][x][y2-k]);
sol=max(sol,rmq[lg[l]][x2-k][y2-k]);
fout<<sol<<"\n";
}
fin.close();
fout.close();
return 0;
}