Cod sursa(job #3163800)

Utilizator panterasbook29Turcu Stiolica Alexandru panterasbook29 Data 1 noiembrie 2023 10:22:36
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>

#define nmax 502

using namespace std;

int rmq[nmax][nmax][8];
int n,q,lg[nmax];

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

void log()
{
    lg[1]=0;
    for(int i=2;i<=n;i++)
        lg[i]=lg[i>>1]+1;
}

int maxim(int a,int b,int c,int d)
{
    int max1=max(a,b);
    int max2=max(c,d);
    return max(max1,max2);
}

void rmqf()
{
    log();
    for(int k=1;k<=lg[n];k++)
    {
        for(int i=1;i+(1<<k)-1<=n;i++)
        {
            for(int j=1;j+(1<<k)-1<=n;j++)
            {
                rmq[i][j][k]=maxim(rmq[i][j][k-1],rmq[i][j+(1<<(k-1))][k-1],rmq[i+(1<<(k-1))][j][k-1],rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
            }
        }
    }
}
int main()
{

    fin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            fin>>rmq[i][j][0];
        }
    }
    rmqf();
    for(int i=1;i<=q;i++)
    {
        int l,c,k,l2,c2;
        fin>>l>>c>>k;
        l2=l+k-1;
        c2=c+k-1;
        fout<<maxim(rmq[l][c][lg[k]],rmq[l2-(1<<lg[k])+1][c][lg[k]],rmq[l][c2-(1<<lg[k])+1][lg[k]],rmq[l2-(1<<lg[k])+1][c2-(1<<lg[k])+1][lg[k]])<<'\n';
    }
    return 0;
}