Cod sursa(job #1765641)

Utilizator andrei20003Ionescu Andrei andrei20003 Data 26 septembrie 2016 21:25:21
Problema Plantatie Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>

int a[401][401][11],v[401];


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

int main()
{
    FILE *fin,*fout;
    int n,m,k,x,y,i,j,l;
    fin=fopen("plantatie.in","r");
    fout=fopen("plantatie.out","w");
    fscanf(fin,"%d%d", &n, &m);
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++) {
            fscanf(fin,"%d", &a[i][j][0]);
            for (l=1;(1<<l)<=i && (1<<l)<=j;l++)
                a[i][j][l]=max(a[i][j][l-1],a[i][j-(1<<(l-1))][l-1],a[i-(1<<(l-1))][j][l-1],a[i-(1<<(l-1))][j-(1<<(l-1))][l-1]);
        }
    for (i=2;i<=n;i++)
        v[i]=1+v[i/2];
    for (i=1;i<=m;i++) {
        fscanf(fin,"%d%d%d", &x, &y, &k);
        l=v[k];
        j=max(a[x+(1<<l)-1][y+(1<<l)-1][l],a[x+(1<<l)-1][y+k-1][l],a[x+k-1][y+(1<<l)-1][l],a[x+k-1][y+k-1][l]);
        fprintf(fout,"%d\n", j);
    }
    return 0;
}