Cod sursa(job #2137222)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 20 februarie 2018 17:52:32
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#define NMAX 501
#define d D
#define pow2(x) (1 << (x))
std::ifstream in("plantatie.in");
std::ofstream out("plantatie.out");
using namespace std;
int n, m;
int lg[NMAX];
int D[10][NMAX][NMAX];

void Input()
{
     in >> n >> m ;
      for ( int i =1; i <= n ;++i)
            for ( int j =1; j<=n;++j)
                       in >> D[0][i][j];
}

void build()
{
    lg[1]=0;
    for ( int i =2; i<=n ;++i)
           lg[i]=lg[i/2]+1;


       for ( int k =1 ; k <= lg[n]; ++k)
       for(int i = 1 ; i <=  n-(1 << (k-1)) ; ++i   )
          for ( int j =1; j <= n-(1 << (k-1)) ; ++j)
       {
           d[k][i][j] = max ( max(d[k-1][i][j],d[k-1][i+(1 << (k-1))][j]),
                             max(d[k-1][i][j+(1 << (k-1))] , d[k-1][i+(1 << (k-1))][j+(1 << (k-1))]   )       );
       }

}

int main()
{
Input();
build();
while (m--) {
        int i, j, k;
        in>>i>>j>>k;

        int p = lg[k];
        int sol = max(
                max(D[p][i][j], D[p][i][j + k - pow2(p)]),
                max(D[p][i + k - pow2(p)][j], D[p][i + k - pow2(p)][j + k - pow2(p)])
        );

        out << sol << "\n";
    }
    return 0;
}