Cod sursa(job #32757)

Utilizator floringh06Florin Ghesu floringh06 Data 18 martie 2007 14:06:12
Problema Subsir 2 Scor 55
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.79 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}

var fi,fo:text;
    a,t,v:array[1..5005] of longint;
    n,i,k,p:longint;

//calculeaza sirul cel mai scurt crescator maximal
//a[i]:lungimea sirului care incepe cu elem i
//t[i]:indexul elem urmator din sirul cautat=recon
 procedure solve;
  var i,j,minv,int:longint;
        mina,minin:longint;
      min,vl,cj,ct:longint;
   begin
    for i:=n downto 1 do
     begin
      minv:=v[i+1];
      mina:=a[i+1];
      cj:=i+1;
      ct:=1;
      for j:=i+2 to n do
      begin
         if v[j]<minv then
          begin
           minv:=v[j];
           mina:=a[j];
           cj:=j;
           ct:=1;
          end
         else
         if v[j]=minv then
          begin
           mina:=a[j];
           inc(ct);
          end;
       end;
      if minv>=v[i] then
       begin
        a[i]:=mina+ct;
        t[i]:=cj;
       end
        else
       begin
        a[i]:=1;
        t[i]:=i;
       end;
      minv:=v[i];
    end;
 {  for i:=1 to n do
    write(fo,t[i],' ');
   writeln(fo);
   for i:=1 to n do
    write(fo,a[i],' ');
   writeln(fo);  }
   min:=v[1];
   minin:=1;
   for i:=2 to n do
     if v[i]<min then
       begin
        min:=v[i];
        minin:=i;
       end;
   writeln(fo,a[minin]);
   write(fo,minin,' ');
   vl:=t[minin];
   i:=t[minin];
   ct:=2;
   while ct<=a[minin] do
    begin
     write(fo,vl,' ');
     vl:=t[vl];
     i:=t[i];
     inc(ct);
    end;
//   write(fo,vl);
  end;




begin
 assign(fi,'subsir2.in'); reset(fi);
 assign(fo,'subsir2.out'); rewrite(fo);
 readln(fi,n);
 for i:=1 to n do
   read(fi,v[i]);
 solve;
close(fi);
close(fo);
end.