Cod sursa(job #128065)

Utilizator MethodScorpan Teodor Method Data 25 ianuarie 2008 23:47:06
Problema Secv Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.93 kb
program exer;
type c=array[1..5000] of longint;
var a,s,ss,b:c;
    n,nn,cm:integer;
    min:longint;

procedure load;
var i:integer;
    f:text;
begin
     assign(f,'secv.in');
     reset(f);
     readln(f,nn);
     n:=nn;
     for i:=1 to n do
                     begin
                          read(f,a[i]);
                          b[i]:=a[i];
                     end;
     close(f);
end;

procedure minf(x:integer);
var i:integer;
begin
     min:=b[x];
     cm:=x;
     for i:=x to n do
         if min>b[i] then
                         begin
                              min:=b[i];
                              cm:=i;
                         end;
end;

procedure exc(x:integer);
var i:integer;
begin
     for i:=x to n do b[i]:=b[i+1];
     dec(n);
end;

procedure regen(var x,y:integer);
var i:integer;
begin
     for i:=1 to x do ss[i]:=s[i];
     y:=x;
     x:=1;

     for i:=1 to nn do b[i]:=a[i];
end;

procedure print(x:integer);
var f:text;
begin
     assign(f,'secv.out');
     rewrite(f);
     write(f,x);
     close(f);
end;

procedure solve;
var i,sk,ii,ssk:integer;
    q:longint;
begin
     sk:=1;
     ssk:=0;
     i:=1;
     while ssk<nn-i do
           begin
                s[1]:=a[i];
                q:=a[i];
                ii:=i+1;

                repeat
                      minf(ii);
                      if min>q then
                                   begin
                                        inc(sk);
                                        s[sk]:=min;
                                        q:=min;
                                        exc(cm);
                                   end
                               else exc(cm);
                until n=1;

                inc(i);
                if ssk<sk then regen(sk,ssk);
                n:=nn;
           end;

     print(i-1+ssk);
end;

begin
     load;
     solve;
end.