Cod sursa(job #2055257)

Utilizator luanastLuana Strimbeanu luanast Data 2 noiembrie 2017 23:30:36
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int a[510][510][40],n,i,j,m,k,x1,x2,t1,t2,c,M,maxim,l;
int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            fin>>a[i][j][0];
    }
    for(k=1;(1<<k)<=n;k++)
        for(i=1;i<=n-(1<<(k-1))+1;i++)
            for(j=1;j<=n-(1<<(k-1))+1;j++){
                maxim=a[i][j][k-1];
                c=1<<(k-1);
                if(a[i][j+c][k-1]>maxim)
                    maxim=a[i][j+c][k-1];
                if(a[i+c][j][k-1]>maxim)
                    maxim=a[i+c][j][k-1];
                if(a[i+c][j+c][k-1]>maxim)
                    maxim=a[i+c][j+c][k-1];
                a[i][j][k]=maxim;
            }
    for(M=1;M<=m;M++){
        fin>>x1>>t1>>l;
        x2=x1+l-1;
        t2=t1+l-1;
        k=(int)log2(l);
        c=1<<k;
        //fout<<k<<"k\n";
        maxim=a[x1][t1][k];
        if(a[x1][t2-c+1][k]>maxim)
            maxim=a[x1][t2-c+1][k];
        if(a[x2-c+1][t1][k]>maxim)
            maxim=a[x2-c+1][t1][k];
        if(a[x2][t2][k]>maxim)
            maxim=a[x2-c+1][t2-c+1][k];
        fout<<maxim<<"\n";
    }
}