Cod sursa(job #2593242)

Utilizator vladcainamisirVlad Cainamisir vladcainamisir Data 3 aprilie 2020 12:57:24
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<cstdio>
#include<algorithm>
int A[505][505][10];
int main()
{
  int n , m ;
  freopen("plantatie.in" , "r" , stdin);
  freopen("plantatie.out" , "w" , stdout);
  scanf("%d%d" , &n , &m);
  for(int i = 1; i <= n ; i ++)
  {
    for(int j = 1; j <= n ; j ++)
      scanf("%d" ,&A[i][j][0]);
  }
  for(int k = 1; k <= 9; k ++)
  for(int i = 1; i <= n && i + (1 << k) <= n + 1; i ++)
    for(int j = 1; j <= n && j + (1 << k) <= n + 1; j ++)
        A[ i ][ j ][ k ] = std :: max(A[i][j][k - 1],std :: max(A[i][j + ( 1<<(k - 1))][k - 1], std :: max(A[i + (1<<(k - 1))][j][k - 1], A[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1])));

  for(int query = 1; query <= m ; query ++)
  {
    int i , j , k;
    scanf("%d%d%d" , &i , &j , &k);
    int p = 0;
    int power = 1;
    while(power <= k){
      power *= 2;
      p ++;
    }
    power /= 2;
    p --;
    printf("%d\n" , std :: max(A[i][j][p],std :: max(A[i][j+k-power][p], std :: max(A[i+k-power][j][p], A[i+k-power][j+k-power][p]))));
  }

  return 0;
}