Cod sursa(job #2720128)

Utilizator ognean.mihnea12Ognean Mihnea Ionut ognean.mihnea12 Data 10 martie 2021 16:56:23
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
using namespace std;

#define NMAX 505

ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

int n, q, i, j, a[10][NMAX][NMAX], log[NMAX], x, y, k, l, dist;

int main()
{
    fin>>n>>q;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        {
            fin>>a[0][i][j];
        }
    }
    log[0]=log[1]=0;
    for(i=2; i<=n; i++)
        log[i]=log[i>>1]+1;
    for(k=1; k<=log[n]; k++)
    {
        for(i=1; i+(1<<(k-1))<=n; i++)
        {
            for(j=1; j+(1<<(k-1))<=n; j++)
            {
                int c1=max(a[k-1][i][j],a[k-1][i+(1<<(k-1))][j]);
                int c2=max(a[k-1][i][j+(1<<(k-1))],a[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
                a[k][i][j]=max(c1,c2);
            }
        }
    }
    while(q>0)
    {
        q--;
        fin>>x>>y>>l;
        dist=log[l];
        int ul=x+l-1;
        int uc=y+l-1;
        int c1=max(a[dist][x][y],a[dist][ul-(1<<dist)+1][y]);
        int c2=max(a[dist][x][uc-(1<<dist)+1],a[dist][ul-(1<<dist)+1][uc-(1<<dist)+1]);
        fout<<max(c1,c2)<<'\n';
    }
    return 0;
}