Cod sursa(job #199809)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 20 iulie 2008 18:40:58
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
# include <stdio.h>

using namespace std;

# define FIN "plantatie.in"
# define FOUT "plantatie.out"
# define MAXN 701

int A[MAXN][MAXN][10];
int N,M,i,j,k,a,b,c,rez;
int Log[MAXN];

    int max(int a,int b,int c,int d)
    {
        int maxim = a;
        if (b > maxim) maxim = b;
        if (c > maxim) maxim = c;
        if (d > maxim) maxim = d;
        return maxim;
    }

    int main()
    {
       freopen(FIN,"r",stdin);
       freopen(FOUT,"w",stdout);
        
       scanf("%d%d",&N,&M);
       for (i = 1; i <= N; ++i)
        for (j = 1; j <= N; ++j)
          scanf("%d",&A[i][j][0]);
            
       for (k=1; (1<<k)<=N; ++k)
         for (i = 1; i <= N; ++i)
           for (j = 1; j <= N; ++j)
            A[i][j][k]=max(A[i][j][k-1],A[i][j+(1<<(k-1))][k-1],
            A[i+(1<<(k-1))][j][k-1],A[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
            
       for (i = 2; i <= N; ++i)
         Log[i] = Log[i >> 1] + 1;
            
       for (i = 1; i <= M; ++i)
         {
            scanf("%d%d%d",&a,&b,&c);
            rez=max(A[a][b][Log[c]],A[a][b+c-(1<<(Log[c]))][Log[c]],
            A[a+c-(1<<(Log[c]))][b][Log[c]],A[a+c-(1<<(Log[c]))][b+c-(1<<(Log[c]))][Log[c]]);
            printf("%d\n",rez);
         }
            
       return 0;
    }