Cod sursa(job #2481101)

Utilizator valeriucaraselCarasel Valeriu valeriucarasel Data 26 octombrie 2019 13:52:15
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>

using namespace std;

int r[10][505][505];
int log[505];

int main()
{
    ifstream in("plantatie.in");
    ofstream out("plantatie.out");
    int n,m;
    in>>n>>m;
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++)
        {
            in>>r[0][i][j];
        }
    }


    log[1]=0;
    for (int i=2;i<=n;i++)
    {
        log[i]=1+log[i/2];
    }



    for (int o=1;o<=log[n];o++)
    {
        for (int i=0;i+(1<<o)<=n;i++)
        {
            for (int j=0;j+(1<<o)<=n;j++)
            {
                r[o][i][j]=max(max(r[o-1][i][j],r[o-1][i][j+(1<<(o-1))]),max(r[o-1][i+(1<<(o-1))][j],r[o-1][i+(1<<(o-1))][j+(1<<(o-1))]));
            }
        }
    }
    for (int o=0;o<=log[n];o++)
    {
        for (int i=0;i<n;i++)
        {
            for (int j=0;j<n;j++)
            {
                cout<<r[o][i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }
    int x1,y1,k,x2,y2;
    for (int i=1;i<=m;i++)
    {
        in>>x1>>y1>>k;
        x1--;
        x2--;
        x2=x1+k-1;
        y2=y1+k-1;
        int l=log[k];
        out<<max(max(r[l][x1][y1],r[l][x1][y2-(1<<l)+1]),max(r[l][x2-(1<<l)+1][y1],r[l][x2-(1<<l)+1][y2-(1<<l)+1]))<<"\n";
    }
    in.close();
    out.close();
    return 0;
}