Cod sursa(job #2674817)

Utilizator ElizaTElla Rose ElizaT Data 20 noiembrie 2020 13:36:12
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

int log1[502],rmq[505][505][10];

int main()
{
    ifstream fin("plantatie.in");
    ofstream fout("plantatie.out");
    int n,q,x,y,k,p = 0;
    fin >> n >> q;
    for (int i = 1;i <= n;i++)
        for (int j = 1;j <= n;j++)
            fin >> rmq[i][j][0];
    for (int i = 0;i <= n;i++) {
        log1[i] = p;
        if (i == 2 * (1 << p))
            p++;
    }
    for (int k = 1;k <= p;k++)
        for (int i = 1;i <= n - (1 << k) + 1;i++)
            for (int j = 1;j <= n - (1 << k) + 1;j++) {
                int aux = (1 << (k - 1));
                rmq[i][j][k] = max(max(rmq[i + aux][j + aux][k - 1], rmq[i + aux][j][k - 1]), max(rmq[i][j + aux][k - 1], rmq[i][j][k - 1]));
            }
    for (int i = 1;i <= q;i++) {
        fin >> x >> y >> k;
        int a = log1[k];
        int b = (1 << a);
        int x1 = x + k - 1;
        int y1 = y + k - 1;
        fout << max(max(rmq[x][y][a], rmq[x][y1 - b + 1][a]), max(rmq[x1 - b + 1][y][a], rmq[x1 - b + 1][y1 - b + 1][a])) << '\n';
    }
    return 0;
}