Cod sursa(job #197068)

Utilizator katakunaCazacu Alexandru katakuna Data 1 iulie 2008 11:18:15
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>

int max(int a,int b,int c, int d){

if(b>a)
a=b;

if(d>c)
c=d;

if(a>c)
return a;

return c;
}

int n,m,a[700][700][10],i,j,k,l,b[600];

int main(){

FILE *f=fopen("plantatie.in","r");
fscanf(f,"%d %d",&n,&m);


  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    fscanf(f,"%d",&a[i][j][0]);

 for(k=1; (1<<k) <=n;k++)
  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)

    a[i][j][k]=max(a[i][j][k-1],a[i+(1<<(k-1))][j][k-1],a[i][j+(1<<(k-1))][k-1],a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);



FILE *g=fopen("plantatie.out","w");

int q=1;
b[1]=0;
b[2]=1;


  for(i=3;i<=n;i++){
   b[i]=q;

   if(i==1<<(q+1)){
   q++;
   b[i]=q;
   }

  }

int C,A,B;

  for(l=1;l<=m;l++){
  fscanf(f,"%d %d %d",&i,&j,&C);
  fprintf(g,"%d\n",max (a[i][j][b[C]],a[i][j+C-(1<<b[C])][b[C]],a[i+C-(1<<b[C])][j][b[C]],a[i+C-(1<<b[C])][j+C-(1<<b[C])][b[C]] ) );
  }


fclose(f);
fclose(g);

return 0;
}