Pagini recente » Cod sursa (job #1684748) | Cod sursa (job #2929912) | Cod sursa (job #1391683) | Cod sursa (job #111442) | Cod sursa (job #1349130)
#include<stdio.h>
#define MAXN 505
#define MAXlogN 10
FILE *f=fopen("plantatie.in","r"), *g=fopen("plantatie.out","w");
long int N, T, a[MAXN][MAXN], RMQ[MAXN][MAXN][MAXlogN];
long int log2[MAXN], put2[MAXN], log2N;
void Citire(){
long int i, j;
fscanf(f,"%ld %ld\n",&N,&T);
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{ fscanf(f,"%ld",&a[i][j]); RMQ[i][j][0] = a[i][j]; }
}
void Creare_log2_put2(){
long int i;
log2[1]=0;
for(i=2;i<=N;i++)
log2[i]=log2[i/2]+1;
log2N = log2[N];
put2[0]=1;
for(i=1;i<=log2N;i++)
put2[i]=put2[i-1]*2;
}
long int Maxim( long int A, long int B, long int C, long int D ){
long int maxim = A;
if( B > maxim ) maxim = B;
if( C > maxim ) maxim = C;
if( D > maxim ) maxim = D;
return maxim;
}
void Creare_RMQ(){
long int i, j, k, p2k, p2k1;
for( k=1; k<=log2N; k++ ){
p2k = put2[k];
p2k1= put2[k-1];
for( i=1; i+p2k-1 <= N; i++ )
for( j=1; j+p2k-1 <= N; j++ )
RMQ[i][j][k] =
Maxim( RMQ[i][j] [k-1], RMQ[i+p2k1][j] [k-1],
RMQ[i][j+p2k1][k-1], RMQ[i+p2k1][j+p2k1][k-1] );
}
}
void Afisare(){
long int i, x, y, z, p, lgp;
for(i=1;i<=T;i++){
fscanf(f,"%ld %ld %ld\n",&x,&y,&z);
lgp = log2[z]; p = put2[log2[z]];
fprintf(g,"%ld\n", Maxim(
RMQ[x][y][lgp],
RMQ[ x+z-p ][y][lgp],
RMQ[x][ y+z-p ][lgp],
RMQ[ x+z-p ][ y+z-p ][lgp]
) );
}
}
int main(){
Citire();
Creare_log2_put2();
Creare_RMQ();
Afisare();
return 0;
}