Cod sursa(job #32239)

Utilizator floringh06Florin Ghesu floringh06 Data 17 martie 2007 16:31:33
Problema Plantatie Scor 50
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.45 kb
{$IFDEF NORMAL}
  {$I-,Q-,R-,S-}
{$ENDIF NORMAL}
{$IFDEF DEBUG}
  {$I+,Q+,R+,S-}
{$ENDIF DEBUG}
{$IFDEF RELEASE}
  {$I-,Q-,R-,S-}
{$ENDIF RELEASE}

type   optim = array[1..500,1..500,0..8] of longint;

var fi,fo:text;
    i,j,n,k,ii,jj,p,pw:integer;
    m:longint;
    opt:optim;

  function maxim(a,b,c,d:longint):longint;
   var max:longint;
    begin
     max:=0;
     if a>max then max:=a;
     if b>max then max:=b;
     if c>max then max:=c;
     if d>max then max:=d;
    maxim:=max;
    end;



  procedure gosolve;
   var pw:integer;
   begin
    pw:=1;
    for k:=1 to 8 do
    begin
     for i:=1 to n do
      for j:=1 to n do
      begin
        if (i+pw<=n) and (j+pw<=n) then
         opt[i,j,k]:=maxim(opt[i,j,k-1],opt[i,j+pw,k-1],opt[i+pw,j,k-1],opt[i+pw,j+pw,k-1])
        else continue;
    {    writeln(fo,i,' ',j,' ',k,' ',opt[i,j,k]);
        flush(fo);    }
      end;
     pw:=pw*2;
    end;
   end;




begin
 assign(fi,'plantatie.in'); reset(fi);
 assign(fo,'plantatie.out'); rewrite(fo);
 readln(fi,n,m);
 for i:=1 to n do
  for j:=1 to n do
    read(fi,opt[i,j,0]);
 gosolve;
 for ii:=1 to m do
  begin
   readln(fi,i,j,k);
   pw:=1;
   for jj:=1 to 9 do
    begin
     pw:=pw*2;
     if pw>k then break;
    end;
   p:=jj-1;
   pw:=pw div 2;
   writeln(fo,maxim(opt[i,j,p],opt[i,j+k-pw,p],opt[i+k-pw,j,p],opt[i+k-pw,j+k-pw,p]));
  end;
//writeln(fo,opt[7,5,2]);
close(fo);
end.