Cod sursa(job #324047)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 14 iunie 2009 14:07:50
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>     
#define lm 510     
     
long a[9][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);     
}