Cod sursa(job #1449844)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 10 iunie 2015 19:38:14
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

int N,M,Sol,Lg,DP[501][501][9];

inline int Max(int A,int B)
{
    return (A > B) ? A : B;
}

int main()
{
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);

     scanf("%d %d",&N,&M);

     int i,j,k;

      for (i = 1;i <= N;i++)
        for (j = 1;j <= N;j++)
         scanf("%d",&DP[i][j][0]);

      for (k = 1;(1 << k) <= N;k++)
      {
        Lg = (1 << (k - 1));
        for (i = 1;i+Lg-1<= N;i++)
          for (j = 1;j+Lg-1 <= N;j++)
              DP[i][j][k] = Max(Max(DP[i][j][k-1],DP[i][j+Lg][k-1]),Max(DP[i+Lg][j][k-1],DP[i+Lg][j+Lg][k-1]));
      }

      while (M--)
      {
          scanf("%d %d %d",&i,&j,&k);
           Lg = log2(k);
           Sol = Max(Max(DP[i][j][Lg],DP[i+k-(1 << Lg)][j][Lg]),Max(DP[i][j+k-(1 << Lg)][Lg],DP[i+k-(1 << Lg)][j+k-(1 << Lg)][Lg]));
          printf("%d\n",Sol);
      }
      return 0;
}