Cod sursa(job #2918250)

Utilizator Mihai_999Diaconeasa Mihai Mihai_999 Data 10 august 2022 17:49:40
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>
#define nl '\n'

using namespace std;

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

const int nax = 501, lgmax = 9;
int st[lgmax][nax][nax], n, q, lg[nax];

int max4(int a, int b, int c, int d)
{
    return max(a, max(b, max(c, d)));
}

int query(int x, int y, int k)
{
    int p = lg[k];
    return max4(st[p][x][y],
                st[p][x+k-(1<<p)][y],
                st[p][x][y+k-(1<<p)],
                st[p][x+k-(1<<p)][y+k-(1<<p)]);
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    lg[1] = 0;
    for (int i = 2; i < nax; i++)
        lg[i] = lg[i/2]+1;
    fin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            fin >> st[0][i][j];
        }
    }
    for (int k = 1; k <= lg[n]; k++)
    {
        for (int i = 1; i <= n-(1<<k)+1; i++)
        {
            for (int j = 1; j <= n-(1<<k)+1; j++)
            {
                st[k][i][j] = max4(st[k-1][i][j],
                                   st[k-1][i+(1<<(k-1))][j],
                                   st[k-1][i][j+(1<<(k-1))],
                                   st[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
            }
        }
    }
    for (int i = 1; i <= q; i++)
    {
        int x, y, k;
        fin >> x >> y >> k;
        fout << query(x, y, k) << nl;
    }
    return 0;
}

/**
so anxious, my thoughts
your lips were soft like winter
in your passion, I was lost
**/