Cod sursa(job #2369413)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 5 martie 2019 23:05:04
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

#define MAXN 500

using namespace std;

ifstream cin( "plantatie.in" );
ofstream cout( "plantatie.out" );

int rmq[MAXN+5][MAXN+5][10];
int log2[MAXN+5];

int main()
{
  int n, m;

  cin>>n>>m;

  for( int i=1;i<=n;i++ )
    for( int j=1;j<=n;j++ )
      cin>>rmq[i][j][0];

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

  for( int i=1;i<=n;i++ )
    for( int j=1;j<=n;j++ )
      for( int l=1;i<=n-(1<<l)+1 && j<=n-(1<<l)+1;l++ )
        rmq[i][j][l]=max(max(rmq[i][j][l-1],
                             rmq[i+(1<<(l-1))][j][l-1]),
                         max(rmq[i][j+(1<<(l-1))][l-1],
                             rmq[i+(1<<(l-1))][j+(1<<(l-1))][l-1]));

  while( m-- )
  {
    int x, y, k;

    cin>>x>>y>>k;

    int l=log2[k];

    cout<<max(max(rmq[x][y][log2[k]],
                  rmq[(x+k)-(1<<log2[k])][y][log2[k]]),
              max(rmq[x][(y+k)-(1<<log2[k])][log2[k]],
                  rmq[(x+k)-(1<<log2[k])][(y+k)-(1<<log2[k])][log2[k]]))<<"\n";
  }

  return 0;
}