Cod sursa(job #21535)

Utilizator adi_nmAdrian Negreanu adi_nm Data 23 februarie 2007 20:03:37
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <math.h>
#include <iomanip>

using namespace std;

long p[520][520][10];
long n,m,i,j,k,t,p2,f,x1,x2,k2,r;
int main (){
  ifstream fin("plantatie.in");
  ofstream fout("plantatie.out");
  fin>>n>>m;
  for (i=1; i<=n; i++)
    for (j=1; j<=n;j++) fin>>p[i][j][0];
  for (k=1;k<=9;k++){
    f=1<<(k-1);
  for (i=1; i<=n; i++)
    for (j=1; j<=n;j++){
        r=p[i][j][k-1];x1=i+f; x2=j+f;k2=k-1;
        if (p[i][x2][k2]>r)  r=p[i][x2][k2];
        if (p[x1][j][k2]>r)  r=p[x1][j][k2];
        if (p[x1][x2][k2]>r) r=p[x1][x2][k2];
        p[i][j][k]=r;
      }
  }
  for (t=1;t<=m;t++){
    fin>>i>>j>>k;
    p2=(int)(log((float)k)/log(2.0)); f=1<<p2;
        r=p[i][j][p2];x1=i+k-f; x2=j+k-f;
        if (p[i][x2][p2]>r) r=p[i][x2][p2];
        if (p[x1][j][p2]>r) r=p[x1][j][p2];
        if (p[x1][x2][p2]>r)r=p[x1][x2][p2];
    fout<<r<<"\n";
  }
 fin.close(); fout.close();
 return 0;
}