Pagini recente » Monitorul de evaluare | Cod sursa (job #741668) | Cod sursa (job #1138502) | Cod sursa (job #191676) | Cod sursa (job #205568)
Cod sursa(job #205568)
#include<stdio.h>
#define NMAX 524
int A[10][NMAX][NMAX];
int lg[NMAX];
//misto problema
inline int max(const int a,const int b,const int c,const int d)
{
int aux=-1;
if( a>aux )
aux=a;
if( b>aux )
aux=b;
if( c>aux )
aux=c;
if( d>aux )
aux=d;
return aux;
}
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
int N,M;
scanf("%d%d",&N,&M);
int i,j,k;
for(i=1; i<=N; ++i)
for(j=1; j<=N; ++j)
scanf("%d",&A[0][i][j]);
int aux,ff;
for( k=1; 1<<(k-1)< N; ++k){
ff=1<<(k-1);
for( i=N-ff; i; --i)
for( j=N-ff; j; --j)
A[k][i][j]=max( A[k-1][i][j], A[k-1][i+ ff][j], A[k-1][i][j+ff], A[k-1][i+ff][j+ff] );
}
int smen1=0,smen2=2;
for(k=2; k<=N; ++k)
{
lg[k]=smen1;
if( k==smen2 )
{
smen2<<=1;
++smen1;
}
}
int x,y,p;
while( M-- )
{
scanf("%d%d%d",&x,&y,&k);
if( k==1 )
printf("%d\n",A[0][x][y]);
else
{
p=lg[k];
printf("%d\n",max( A[ p ][ x ][ y ], A[ p ][ x+k-(1<<p) ][ y ], A[ p ][ x ][ y+k-(1<<p)], A[ p ][ x+k-(1<<p) ][ y+k-(1<<p) ] ) );
}
}
return 0;
}