Cod sursa(job #33701)

Utilizator Adrian001Vladulescu Adrian Adrian001 Data 19 martie 2007 18:21:58
Problema Plantatie Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.37 kb
Program cel;
Type matrice=array[1..500,1..500] of longint;
     tablou=array[1..500,1..500,1..500] of longint;
var f,g:text;
    a:matrice;
    b:tablou;
    max,p,w:longint;
    n,m,i,j,k:integer;
procedure maxim(var max:longint;i,j,k:integer);
Begin
 If max<b[i,j,k] then max:=b[i,j,k];
end;

Begin
Assign(f,'plantatie.in');Reset(f);
Assign(g,'plantatie.out');Rewrite(g);
Readln(f,n,m);
For i:=1 to n do
 Begin
  For j:=1 to n do Read(f,a[i,j]);
  Readln(f);
 end;
k:=1;
p:=1;
While k<=n do
 Begin
  i:=1;
  While i<=n-k+1 do
   Begin
    j:=1;
    While j<=n-k+1 do
     Begin
      If k=1 then b[i,j,k]:=a[i,j]
             else Begin
                   max:=b[i,j,k div 2];
                   maxim(max,i,j+k div 2,k div 2);
                   maxim(max,i+k div 2,j,k div 2);
                   maxim(max,i+k div 2,j+k div 2,k div 2);
                   b[i,j,k]:=max;
                  end;
       j:=j+1;
      end;
     i:=i+1;
    end;
   k:=k*2;
 end;

For w:=1 to m do
 Begin
  Readln(f,i,j,k);
 If k=1 then Writeln(g,b[i,j,k])
        else Begin
              p:=1;
              While p*2<=k do p:=p*2;
  max:=b[i,j,p];
  If max<b[i,j+k-p,p] then max:=b[i,j+k-p,p];
  If max<b[i+k-p,j,p] then max:=b[i+k-p,j,p];
  If max<b[i+k-p,j+k-p,p] then max:=b[i+k-p,j+k-p,p];
  Writeln(g,max);
  end;
 end;
Close(f);
Close(g);
end.