Cod sursa(job #1896790)

Utilizator KronSabau Valeriu Kron Data 28 februarie 2017 21:47:33
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#define Nmax 510
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int a[Nmax][Nmax],rmq[12][Nmax][Nmax];
int log[Nmax],n,m;

int main()
{
    f>> n >> m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            f>> a[i][j];
            rmq[0][i][j]=a[i][j];
        }

    for(int i=2;i<=n;i++) log[i]=log[i/2]+1;

    for(int k=1;(1<<k)<=n;k++)
    {
        for(int i=1;i+(1<<k)<=n+1;i++)
        {
            for(int j=1;j+(1<<k)<=n+1;j++)
            {
                rmq[k][i][j]=max(max(rmq[k-1][i][j],rmq[k-1][i+(1<<(k-1))][j]),
                                 max(rmq[k-1][i][j+(1<<(k-1))],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
            }
        }
    }
    int x,y,k,x1,y1,sol,l,p;
    for(int i=0;i<m;i++)
    {
        f>> x >> y >> k;
        x1=x+k-(1<<log[k]);
        y1=y+k-(1<<log[k]);
        sol=max(rmq[log[k]][x][y],max(rmq[log[k]][x][y1],max(rmq[log[k]][x1][y],rmq[log[k]][x1][y1] )));
        g << sol << "\n";

    }

    return 0;
}