Pagini recente » Cod sursa (job #299820) | Cod sursa (job #1516662) | Cod sursa (job #3207149) | Cod sursa (job #435309) | Cod sursa (job #514273)
Cod sursa(job #514273)
#include<stdio.h>
FILE*f=fopen("plantatie.in","r");
FILE*g=fopen("plantatie.out","w");
int N,Q,i,j,p2[12],M[512][512][11],E[512],R,L,e,k;
int max(int a,int b){
if ( a > b )
return a;
return b;
}
int main () {
fscanf(f,"%d %d",&N,&Q);
for ( i = 1 ; i <= N ; ++i ){
for ( j = 1 ; j <= N ; ++j ){
fscanf(f,"%d",&M[i][j][0]);
}
E[ i + 1 ] = E[ ( i + 1 ) / 2 ] + 1;
}
//M[i][j][k] = maximul din patratul cu coltul stanga-sus in i si j si latura 2 ^ k
for ( i = 1, p2[0] = 1 ; p2[i-1] <= 512 ; p2[i] = 2 * p2[i-1] , ++i ) {};
for ( k = 1 ; k <= E[N] ; ++k ){
for ( i = 1 ; i <= N ; ++i ){
for ( j = 1 ; j <= N ; ++j ){
M[i][j][k] = M[i][j][k-1];
if( i + p2[k-1] <= N )
M[i][j][k] = max(M[i][j][k],M[i+p2[k-1]][j][k-1]);
if( j+p2[k-1] <= N )
M[i][j][k] = max(M[i][j][k],M[i][j+p2[k-1]][k-1]);
if ( i + p2[k-1] <= N && j+p2[k-1] <= N )
M[i][j][k] = max(M[i][j][k],M[i+p2[k-1]][j+p2[k-1]][k-1]);
}
}
}
while ( Q-- ) {
fscanf(f,"%d %d %d",&i,&j,&L);
e = E[L];
R = 0;
R = max(R,M[i][j][e]);
R = max(R,M[i+L-p2[e]][j][e]);
R = max(R,M[i][j+L-p2[e]][e]);
R = max(R,M[i+L-p2[e]][j+L-p2[e]][e]);
fprintf(g,"%d\n",R);
}
fclose(f);
fclose(g);
return 0;
}