Cod sursa(job #331981)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 16 iulie 2009 01:48:56
Problema Plantatie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>
#define DIM 550
#define DIMQ 75050
struct query 
{
    int x,y,k;
};
query q[DIMQ];
int a[DIM][DIM][DIM];
int max (int e1,int e2,int e3,int e4)
{
    int m=0;
    if(m<e1)
        m=e1;
    if(m<e2)
        m=e2;
    if(m<e3)
        m=e3;
    if(m<e4)
        m=e4;
    return m;
}
void map (int n,int maxk,int maxx,int maxy)
{
    int k,i,j;
    for(k=2;k<=maxk && k<=n;++k)
        for(i=1;i<=maxx && i<=n;++i)
            for(j=1;j<=maxy && j<=n;++j)
                a[k][i][j]=max (a[k-1][i][j],a[k-1][i+1][j],a[k-1][i][j+1],a[k-1][i+1][j+1]);
}
int main ()
{
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);
    int m,i,j,maxk,maxx,maxy,n;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            scanf("%d",&a[1][i][j]);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].k);
        if(maxk<q[i].k)
            maxk=q[i].k;
        if(maxx<q[i].x+q[i].k-1)
            maxx=q[i].x+q[i].k-1;
        if(maxy<q[i].y+q[i].k-1)
            maxy=q[i].y+q[i].k-1;        
    }
    map (n,maxk,maxx,maxy);
    for(i=1;i<=m;++i)
        printf("%d\n",a[q[i].k][q[i].x][q[i].y]);
    return 0;
}