Cod sursa(job #2754864)

Utilizator vlad_dimaVlad Dima vlad_dima Data 26 mai 2021 16:57:36
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("plantatie.in");
ofstream o("plantatie.out");

int rmq[501][501][10], a[501][501];

void creareMatrice(int n, int a[501][501])
{
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            rmq[i][j][0] = a[i][j];

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

int gasireMaxim(int i, int j, int k)
{
    int l = (int)log2(k);
//    cout<<rmq[i+k-(1<<l)][j][l]<<' ';
    return max(max(rmq[i][j][l],rmq[i][j+k-(1<<l)][l]), max(rmq[i+k-(1<<l)][j][l], rmq[i+k-(1<<l)][j+k-(1<<l)][l]));
}

int main()
{
    int n, m, i1,j1,k;

    f>>n>>m;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            f>>a[i][j];
    creareMatrice(n,a);
    for (int i = 0; i < m; i++)
    {
        f>>i1>>j1>>k;
        o<<gasireMaxim(i1,j1,k)<<'\n';
    }


}