Pagini recente » Cod sursa (job #60517) | Cod sursa (job #567698) | Cod sursa (job #2425817) | Cod sursa (job #2423874) | Cod sursa (job #2278252)
#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);
cin>>n>>t;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>rmq[i][j][0];
}
}
for(int i=0;i<N;i++)
{
lg2[i]=(int)(log2(i));
}
for(int lg=1;(1<<lg)<=n;lg++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
/// build rmq[i][j][lg]
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;
}