Cod sursa(job #3230736)

Utilizator geo_uwuManolachi George geo_uwu Data 22 mai 2024 17:12:41
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
using namespace std;
int n, q, rmq[15][510][510], Log[510];
int main()
{
    ios_base::sync_with_stdio(NULL);
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");
    f >> n >> q;
    ++n;
    for (int i = 1; i < n; ++i)
        for (int j = 1; j < n; ++j)
            f >> rmq[0][i][j];

    for (int k = 1, L = 2; L < n; L *= 2, ++k)
    {
        int bound = n - L + 1;
        for (int i = 1; i < bound; ++i)
            for (int j = 1; j < bound; ++j)
            {
                int newI = i + L / 2;
                int newJ = j + L / 2;
                rmq[k][i][j] = max({rmq[k - 1][i][j], rmq[k - 1][newI][newJ], rmq[k - 1][i][newJ], rmq[k - 1][newI][j]});
            }
    }
    for (int i = 2; i < n; ++i)
        Log[i] = Log[i / 2] + 1;

    for (; q--;)
    {
        int i, j, l;
        f >> i >> j >> l;
        int k = Log[l];
        int len = (1 << k);
        int newI = i + l - len;
        int newJ = j + l - len;
        g << max({rmq[k][i][j], rmq[k][i][newJ], rmq[k][newI][j], rmq[k][newI][newJ]}) << '\n';
    }
    f.close();
    g.close();
    return 0;
}