Cod sursa(job #1478662)

Utilizator DjokValeriu Motroi Djok Data 29 august 2015 10:26:45
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<bits/stdc++.h>
using namespace std;

int i,j,k,n,q,Rmq[505][505][15],lg[505],rs,aux,gmb;

int Max(int a,int b,int c,int d) { return max(max(a,b),max(c,d)); }

void RMQ() {
    for(i=2;i<=500;++i) lg[i]=lg[i/2]+1;

    for(k=1;k<=lg[n];++k)
     for(i=1;i+(1<<(k-1))<=n;++i)
      for(j=1;j+(1<<(k-1))<=n;++j)
      {
        aux=(1<<(k-1));
        Rmq[i][j][k]=Max(Rmq[i][j][k-1],Rmq[i+aux][j+aux][k-1],Rmq[i+aux][j][k-1],Rmq[i][j+aux][k-1]);
      }
}

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

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

  for(RMQ();q;--q)
  {
    cin>>i>>j>>k; aux=lg[k]; gmb=(1<<aux);
    cout<<Max(Rmq[i][j][aux],Rmq[i+k-gmb][j+k-gmb][aux],Rmq[i+k-gmb][j][aux],Rmq[i][j+k-gmb][aux])<<'\n';
  }

 return 0;
}