Cod sursa(job #2642006)

Utilizator eugen5092eugen barbulescu eugen5092 Data 13 august 2020 13:22:43
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>
using namespace std;

ifstream ci("plantatie.in");
ofstream cou("plantatie.out");

int lg[505];
int rmq[20][505][505];

int n,m;

void pt(){
    for(int i=2;i<=n;i++){
        lg[i]=lg[i/2]+1;

    }
}

int MAX(int a,int b,int c,int d){
    return max(max(a,b),max(c,d));
}

void RMQ(){
    int i,j,k,l1,l2;
    for(k=1;k<=lg[n];k++){
        l1=(1<<k);
        l2=(1<<(k-1));
        for(i=1;i<=n-l1+1;i++){
            for(j=1;j<=n-l1+1;j++){
                rmq[k][i][j]=MAX(rmq[k-1][i][j],
                                 rmq[k-1][i+l2][j],
                                 rmq[k-1][i][j+l2],
                                 rmq[k-1][i+l2][j+l2]);

            }
        }
    }
}

void afis(){
    int i,j,k,l1,l2;

    for(k=1;k<=lg[n];k++){
        l1=(1<<k);
        l2=(1<<(k-1));
        for(i=1;i<=n-l1+1;i++){
            for(j=1;j<=n-l1+1;j++){
                cout<<k<<" "<<i<<" "<<j<<" "<<rmq[k][i][j]<<"\n";
            }
        }
    }
}

int Query(int i,int j,int c){
    int l1=lg[c];
    int l2=(1<<l1);
    return MAX(rmq[l1][i][j],
               rmq[l1][i+c-l2][j],
               rmq[l1][i][j+c-l2],
               rmq[l1][i+c-l2][j+c-l2]);
}

void citire(){
    ci>>n>>m;
    int i,j;
    int a,b,c;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            ci>>rmq[0][i][j];
        }
    }
    pt();
    RMQ();
    ///afis();
    for(i=1;i<=m;i++){
        ci>>a>>b>>c;
        cou<<Query(a,b,c)<<"\n";
    }
}

int main()
{
    citire();
    return 0;
}