Pagini recente » Cod sursa (job #1500623) | Cod sursa (job #2219607) | Cod sursa (job #52093) | Cod sursa (job #1980181) | Cod sursa (job #2432895)
#include <bits/stdc++.h>
using namespace std;
const int nmax=505;
int l[nmax],v[nmax][nmax],rmq[nmax][nmax][20],lg[nmax],a,b,k,n,m;
void buildrmq()
{
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
for(int i=1; i<=n; i++)
for(int j=1;j<=n;j++)
rmq[i][j][0]=v[i][j];
for(int l=1; l<=lg[n]; l++)
for(int i=1; i<=n-(1<<l)+1; i++)
for(int j=1;j<=n-(1<<l)+1;j++)
rmq[i][j][l]=max(rmq[i][j][l-1],max(rmq[i+(1<<(l-1))][j][l-1],max(rmq[i][j+(1<<(l-1))][l-1],rmq[i+(1<<(l-1))][j+(1<<(l-1))][l-1])));
}
int answerrmq(int x,int y,int k)
{
return max(rmq[x][y][lg[k]],max(rmq[x+k-(1<<(lg[k]))][y][lg[k]],max(rmq[x][y+k-(1<<(lg[k]))][lg[k]],rmq[x+k-(1<<(lg[k]))][y+k-(1<<(lg[k]))][lg[k]])));
}
int main()
{
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>v[i][j];
buildrmq();
for(int i=1;i<=m;i++)
{
cin>>a>>b>>k;
cout<<answerrmq(a,b,k)<<"\n";
}
return 0;
}