Cod sursa(job #2011756)

Utilizator sfechisalin@yahoo.comSfechis Alin [email protected] Data 17 august 2017 02:32:25
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

#define K_MAX 10
using namespace std;

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

int N, M;
vector<vector<vector<int>>>RMQ;
vector<int>Log2;

int main()
{
    fin >> N >> M;
    RMQ.resize(K_MAX + 1, vector<vector<int>>(N + 1, vector<int>(N + 1, 0)));
    Log2.resize(N + 1, 0);

    for (int i = 2; i <= N; ++i)
        Log2[i] = Log2[i >> 1] + 1;

    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= N; ++j)
            fin >> RMQ[0][i][j];

    for (int k = 1; (1 << k) <= N; ++k)
        for (int i = 1; i <= N; ++i)
            for (int j = 1; j <= N; ++j)
            {
                 int l = (1 << (k - 1));
                 RMQ[k][i][j] = max( RMQ[k - 1][i][j],
                                  max(RMQ[k - 1][i + l][j + l],
                                      max(RMQ[k - 1][i][j + l], RMQ[k - 1][i + l][j])));
            }


    for(int i, j, k; M; --M)
    {
        fin >> i >> j >> k;
        int l = Log2[k];
        fout << max(RMQ[l][i][j],
                    max(RMQ[l][i + k - (1 << l) ][j + k - (1 <<l)],
                        max(RMQ[l][i + k - (1 << l)][j], RMQ[l][i][j + k - (1 << l)]))) << "\n";
    }

    return 0;
}