Cod sursa(job #253309)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 17:37:41
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
 #include <cstdio>  
 #define lm 510  
   
 long a[10][lm][lm],lg[lm],n,m,x,y,l,k;  
   
 long max(long a, long b, long c, long d)  
 {  
     if (a<b) a=b;  
     if (a<c) a=c;  
     if (a<d) a=d;  
     return a;  
 }  
   
 int main()  
 {  
     freopen("plantatie.in","r",stdin);  
     freopen("plantatie.out","w",stdout);  
     scanf("%ld %ld",&n,&m);  
     long i,j;  
     for (i=1; i<=n; i++)  
         for (j=1; j<=n; j++) scanf("%ld ",&a[0][i][j]);  
     for (i=2; i<=n; lg[i]=lg[i++/2]+1);  
     for (k=1; k<=lg[n]; k++)  
         for (i=1; i+(1<<k)-1<=n; i++)  
             for (j=1; j+(1<<k)-1<=n; j++)  
             {  
                 l=1<<(k-1);  
                 a[k][i][j]=max(a[k-1][i][j], a[k-1][i][j+l], a[k-1][i+l][j], a[k-1][i+l][j+l]);  
             }  
     for (i=1; i<=m; i++)  
     {  
         scanf("%ld %ld %ld",&x,&y,&l);  
         k=lg[l];  
         printf("%ld\n",max(a[k][x][y], a[k][x][y+l-(1<<k)],  
             a[k][x+l-(1<<k)][y], a[k][x+l-(1<<k)][y+l-(1<<k)]));  
     }  
     fclose(stdin);  
     fclose(stdout);  
}