Cod sursa(job #1715221)

Utilizator denniscrevusDennis Curti denniscrevus Data 10 iunie 2016 09:39:27
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#define MAX(a,b) (((a) >(b)) ? (a):(b))

using namespace std;

int lg[505], rmq[10][505][505], n, i, j, q, v1,v2,v3,v4,z, x,y,log, l, test, a1, a2, a3, a4,nr,k,dif, c;

int main()
{
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");

    f>>n>>q;     //CITIRE

    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            f>>rmq[0][i][j];

    for(i=2;i<=500;i++)
        lg[i]=lg[i/2]+1;

    for(x=1;x<=lg[n];x++)
        for(y=1;y<=n;y++)
            for(z=1;z<=n;z++)
                {
                    nr=(1<<(x-1));

                    a1=rmq[x-1][y][z];
                    a2=rmq[x-1][y+nr][z];
                    a3=rmq[x-1][y][z+nr];
                    a4=rmq[x-1][y+nr][z+nr];

                    v1=MAX(a1,a2);
                    v2=MAX(a3,a4);
                    v3=MAX(v1,v2);

                    rmq[x][y][z]=v3;
                }

    /*for(x=1;x<=lg[n];x++)
    {
        for(y=1;y<=n;y++)
        {
            g<<"\n";
            for(z=1;z<=n;z++)
                g<<rmq[x][y][z]<<" ";
        }
        g<<"\n\n\n";
    }
    */

    for(i=1;i<=q;i++)
    {
        f>>x>>y>>k;

        log=lg[k];

        dif=k-(1<<log);

        a1=rmq[log][x][y];
        a2=rmq[log][x+dif][y];
        a3=rmq[log][x][y+dif];
        a4=rmq[log][x+dif][y+dif];
        v1=MAX(a1,a2);
        v2=MAX(a3,a4);
        v3=MAX(v1,v2);

        g<<v3<<"\n";
    }

}