Cod sursa(job #2765530)

Utilizator iulianarsenoiuArsenoiu Iulian iulianarsenoiu Data 27 iulie 2021 17:19:46
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,m;
int Log2[505],rmq[25][505][505];
void build_rmq()
{
    for(int i=2;i<=n;i++)
    {
        Log2[i] = 1 + Log2[i/2];
    }
    for(int k=1;k<=Log2[n];k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                rmq[k][i][j] = max(max(rmq[k-1][i][j],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]),max(rmq[k-1][i+(1<<(k-1))][j],rmq[k-1][i][j+(1<<(k-1))]));
            }
        }
    }
}
int query(int l, int c, int k)
{
    int L = l+k-1;
    int C = c+k-1;
    k = Log2[k];
    return max(max(rmq[k][l][c],rmq[k][L-(1<<k)+1][C-(1<<k)+1]),max(rmq[k][L-(1<<k)+1][c],rmq[k][l][C-(1<<k)+1]));
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            f>>rmq[0][i][j];
        }
    }
    build_rmq();
    for(int i=1;i<=m;i++)
    {
        int l,c,k;
        f>>l>>c>>k;
        g<<query(l,c,k)<<'\n';
    }
    return 0;
}