Cod sursa(job #2901885)

Utilizator adamemi02emanuel adam adamemi02 Data 14 mai 2022 18:13:57
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int lg[501],rmq[9][501][501];
int main() {

        int N,Q;
        cin>>N>>Q;
        for(int i=1;i<=N;i++)
            for(int j=1;j<=N;j++)
            {
                cin>>rmq[0][i][j];
            }

        lg[1]=0;
        for(int i=2;i<=N;i++)
            lg[i]=lg[i/2]+1;

        for(int baza=1;baza<=lg[N];baza++)
            for(int i=1;i<=N-(1<<baza)+1;i++)
                for(int j=1;j<=N-(1<<baza)+1;j++)
                    rmq[baza][i][j]=max(max(rmq[baza-1][i][j],rmq[baza-1][i+(1<<(baza-1))][j]),max(rmq[baza-1][i][j+(1<<(baza-1))],rmq[baza-1][i+(1<<(baza-1))][j+(1<<(baza-1))]))  ;

int i,j,k,p;
        for(int c=1;c<=Q;c++)
        {
            cin>>i>>j>>k;
            if(k==(1<<lg[k]))
            cout<<rmq[lg[k]][i][j]<<"\n";
            else{
                p=lg[k];
                cout<<max(max(rmq[p][i][j],rmq[p][i][j+k-(1<<p)]),max(rmq[p][i+k-(1<<p)][j+k-(1<<p)],rmq[p][i+k-(1<<p)][j]))<<"\n";

            }

        }
}