Cod sursa(job #2772614)

Utilizator Tudor_StefanaStefana Tudor Tudor_Stefana Data 1 septembrie 2021 20:11:11
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, q;
int rmq[503][503][9];

void citire()
{
    int i, j;
    fin >> n >> q;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            fin >> rmq[i][j][0];
}

void matrice()
{
    int i, j, k, lungime;

    for(k = 1; (1 << k) <= n; k++)
        for(i = 1; i <= n - (1 << k) + 1; i++)
            for(j = 1; j <= n - (1 << k) + 1; j++)
            {
                lungime = 1 << (k - 1);
                rmq[i][j][k] = max( rmq[i][j][k - 1], max(
                                    rmq[i + lungime][j][k - 1], max(
                                    rmq[i][j + lungime][k - 1],
                                    rmq[i + lungime][j + lungime][k - 1] )));
            }
}

int logaritm2(int x)
{
    int i;
    for(i  = 0; 1 << i <= x; i++) ;
    return (i - 1);
}

void rezolvare()
{
    int i, j, k, sol, lglat, putere2;
    for(;q--;)
    {
        fin >> i >> j >> k;
        lglat = logaritm2(k);
        putere2 = 1 << lglat;
        sol = max( rmq[i][j][lglat], max(
                   rmq[i + k - putere2][j][lglat], max(
                   rmq[i][j + k - putere2][lglat],
                   rmq[i + k - putere2][j + k - putere2][lglat]
                   )));

        fout << sol << "\n";
    }
}

int main()
{
    citire();
    matrice();
    rezolvare();

    fin.close();
    fout.close();
    return 0;
}