Cod sursa(job #2291298)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 27 noiembrie 2018 20:58:39
Problema Plantatie Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <iostream>

using namespace std;
int a[511][511],d[511][511][11],v[511];
int main()
{
    FILE *fin=fopen ("plantatie.in","r");
    FILE *fout=fopen ("plantatie.out","w");
    int n,m,i,j,k,sol,p2,i1,j1,i2,j2,l;
    fscanf (fin,"%d%d",&n,&m);
    for (i=2;i<=n;i++)
        v[i]=1+v[i/2];
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            fscanf (fin,"%d",&d[i][j][0]);
    k=1;
    while ((1<<k)<=n){
        p2=(1<<(k-1));
        for (i=1;i+p2<=n;i++)
            for (j=1;j+p2<=n;j++)
                d[i][j][k]=max (max(d[i][j][k-1],d[i+p2][j][k-1]),max(d[i+p2][j+p2][k-1],d[i][j+p2][k-1]));
        k++;
    }
    /// am facut precalcularea
    for (;m;m--){
        fscanf (fin,"%d%d%d",&i1,&j1,&k);
        i2=i1+k-1;
        j2=j1+k-1;
        l=v[k];
        p2=(1<<l);
        sol=max (max(d[i1][j1][l],d[i2-(1<<l)+1][j1][l]),max(d[i2-(1<<l)+1][j2-(1<<l)+1][l],d[i1][j2-(1<<l)+1][l]));
        fprintf (fout,"%d\n",sol);
    }
    return 0;
}