Cod sursa(job #2402723)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 10 aprilie 2019 22:51:23
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
#define Dim 504
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int N,Q,rmq[10][Dim][Dim],x;
int a,b,r1,r2,r3,r4,q1,q2,lat;

int main()
{
    f>>N>>Q;
    for(int i=1;i<=N;i++)
    for(int j=1;j<=N;j++)
    {
        f>>x;
        rmq[0][i][j]=x;
    }

    for(int k=1;(1<<k)<=N;k++)
    for(int i=1;i+(1<<k)-1<=N;i++)
    for(int j=1;j+(1<<k)-1<=N;j++)
    {
        r1=rmq[k-1][i][j];
        r2=rmq[k-1][i][j+(1<<(k-1))];
        r3=rmq[k-1][i+(1<<(k-1))][j];
        r4=rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))];
        q1=max(r1,r2);
        q2=max(r3,r4);
        rmq[k][i][j]=max(q1,q2);

    }
    for(int i=1;i<=Q;i++)
    {
        f>>a>>b>>lat;
        int capa=a+lat-1;
        int capb=b+lat-1;
        lat=log2(lat);
        r1=rmq[lat][a][b];
        r2=rmq[lat][a][capb-(1<<lat)+1];
        r3=rmq[lat][capa-(1<<lat)+1][b];
        r4=rmq[lat][capa-(1<<lat)+1][capb-(1<<lat)+1];
        q1=max(r1,r2);
        q2=max(r3,r4);
        g<<max(q1,q2)<<'\n';
    }
    return 0;
}