Cod sursa(job #2866754)

Utilizator Rares5000Baciu Rares Rares5000 Data 9 martie 2022 22:25:26
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>
#define LOG 9

using namespace std;

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

int v[502][502][LOG], n, m, puteri[502];

int main()
{
    int i, j, k, l, x, y;
    fin >> n >> m;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            fin >> v[i][j][0];
    puteri[1] = 0;
    for(i = 2; i <= n; i++)
        puteri[i] = puteri[i / 2] + 1;
    for(k = 1; k <= LOG; k++)
        for(i = 1; i <= n - (1 << k) + 1; i++)
            for(j = 1; j <= n - (1 << k) + 1; j++)
            {
                int min1 = max(v[i][j][k - 1], v[i][j + (1 << (k - 1))][k - 1]);
                int min2 = max(v[i + (1 << (k - 1))][j][k - 1], v[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);
                v[i][j][k] = max(min1, min2);
            }
    for(i = 1; i <= m; i++)
    {
        fin >> x >> y >> l;
        int min1 = max(v[x][y][puteri[l]], v[x][l + y - (1 << puteri[l])][puteri[l]]);
        int min2 = max(v[l + x - (1 << puteri[l])][y][puteri[l]], v[l + x - (1 << puteri[l])][l + y - (1 << puteri[l])][puteri[l]]);
        int ans = max(min1, min2);
        fout << ans << "\n";
    }
    return 0;
}