Pagini recente » Istoria paginii runda/oni2015.1112.bv.1/clasament | Monitorul de evaluare | Cod sursa (job #2889834) | Cod sursa (job #1752457) | Cod sursa (job #2278261)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=500+5;
const int LOG=10;
int n,t;
int rmq[N][N][LOG];
int lg2[N];
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d %d",&n,&t);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&rmq[i][j][0]);
}
}
for(register int i=2;i<N;i++)
{
lg2[i]=lg2[i/2]+1;
}
for(register int lg=1;(1<<lg)<=n;lg++)
{
for(register int i=1;i<=n;i++)
{
for(register int j=1;j<=n;j++)
{
rmq[i][j][lg]=max(rmq[i][j][lg],rmq[i][j][lg-1]);
rmq[i][j][lg]=max(rmq[i][j][lg],rmq[i][j+(1<<(lg-1))][lg-1]);
rmq[i][j][lg]=max(rmq[i][j][lg],rmq[i+(1<<(lg-1))][j][lg-1]);
rmq[i][j][lg]=max(rmq[i][j][lg],rmq[i+(1<<(lg-1))][j+(1<<(lg-1))][lg-1]);
}
}
}
for(int tc=1;tc<=t;tc++)
{
int r,c,len;
cin>>r>>c>>len;
int re=r+len-1;
int ce=c+len-1;
int lg=lg2[len];
int ans=0;
ans=max(ans,rmq[r][c][lg]);
ans=max(ans,rmq[r][ce-(1<<lg)+1][lg]);
ans=max(ans,rmq[re-(1<<lg)+1][c][lg]);
ans=max(ans,rmq[re-(1<<lg)+1][ce-(1<<lg)+1][lg]);
cout<<ans<<"\n";
}
return 0;
}