Cod sursa(job #2428578)

Utilizator Briana_NeaguNeagu Briana Briana_Neagu Data 5 iunie 2019 20:24:38
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>
#define maxim 501
using namespace std;

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

int dp[maxim][maxim][10]; /// incepe pe linia i, coloana j,  de latura 1<<k
int n,m;

int main()
{
   f>>n>>m;

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


   for (int i= n ;i>=1 ;i--)
       for (int j=n ; j >=1 ;j--)
           for (int k=1; i+(1<<k)-1<= n && j+(1<<k)-1<=n ; k++ )
           {
               int pow=1<<(k-1);
               dp[i][j][k]=max(dp[i][j][k-1], dp[i][j+pow][k-1]); // patrate de sus
               dp[i][j][k]=max(dp[i][j][k],dp[i+pow][j][k-1]);   //patrate de jos
               dp[i][j][k]=max(dp[i][j][k], dp[i+pow][j+pow][k-1]);
           }

   int i,j,k;
   while (m--)
   {

       f>>i>>j>>k;
       int ans;
       int lg=(int)log2(k);
       int dif=k-(1<<lg);
       ans=max(dp[i][j][lg],dp[i][j+dif][lg]);
       ans=max(ans,dp[i+dif][j][lg]);
       ans=max(ans,dp[i+dif][j+dif][lg]);
       g<<ans<<'\n';

   }

}