Cod sursa(job #1977907)

Utilizator rares1012Rares Cautis rares1012 Data 6 mai 2017 13:46:51
Problema Plantatie Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>

int v[500][500][10];

int log[501];

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

int main()
{
    int n,m,i,j,k,x,y,dist,dif,rez;
    FILE*fi,*fo;
    fi=fopen("plantatie.in","r");
    fo=fopen("plantatie.out","w");
    fscanf(fi,"%d%d",&n,&m);
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
        {
            fscanf(fi,"%d",&v[i][j][0]);
            for(k=1; (1<<k)<=j && (1<<k)<=i; k++)
            {
                v[i][j][k]=max(v[i][j][k-1],v[i][j-(1<<(k-1))][k-1],v[i-(1<<(k-1))][j][k-1],v[i-(1<<(k-1))][j-(1<<(k-1))][k-1]);
            }
        }
    for(i=2; i<=500; i++)
        log[i]=1+log[i/2];
    for(i=0; i<m; i++)
    {
        fscanf(fi,"%d%d%d",&x,&y,&dist);
        dist--;
        x--;
        y--;
        dif=log[dist];
        rez=max(v[x+(1<<dif)][y+(1<<dif)][dif],v[x+dist][y+(1<<dif)][dif],v[x+(1<<dif)][y+dist][dif],v[x+dist][y+dist][dif]);
        fprintf(fo,"%d\n",rez);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}