Cod sursa(job #2230363)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 9 august 2018 20:40:30
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#define VAL 505
#define PUT 12

using namespace std;

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

int N, Q, i, j, A, B, X, Y;
int v[VAL][VAL], RMQ[VAL][VAL][PUT];
int ANS, lat, P, cnt, L, C, LOG[VAL];

int main()
{
    fin >> N >> Q;
    for (i=1; i<=N; i++)
    {
        for (j=1; j<=N; j++)
        {
            fin >> v[i][j];
            RMQ[i][j][0]=v[i][j];
        }
        LOG[i]=P;
        if (i==2*(1 << P))
            P++;
    }
    for (cnt=1; cnt<=P; cnt++)
    {
        for (i=1; i+(1 << cnt)-1<=N; i++)
        {
            for (j=1; j+(1 << cnt)-1<=N; j++)
            {
                L=i+(1 << (cnt-1));
                C=j+(1 << (cnt-1));
                RMQ[i][j][cnt]=RMQ[i][j][cnt-1];
                RMQ[i][j][cnt]=max(RMQ[i][j][cnt], RMQ[i][C][cnt-1]);
                RMQ[i][j][cnt]=max(RMQ[i][j][cnt], RMQ[L][j][cnt-1]);
                RMQ[i][j][cnt]=max(RMQ[i][j][cnt], RMQ[L][C][cnt-1]);
            }
        }
    }
    for (cnt=1; cnt<=Q; cnt++)
    {
        fin >> X >> Y >> lat;
        A=LOG[lat];
        B=(1 << A);
        L=X+lat-B;
        C=Y+lat-B;
        ANS=RMQ[X][Y][A];
        ANS=max(ANS, RMQ[X][C][A]);
        ANS=max(ANS, RMQ[L][Y][A]);
        ANS=max(ANS, RMQ[L][C][A]);
        fout << ANS << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}