(*PROGRAM INF32*); CONST MAXN=30; VAR A:ARRAY[1..MAXN]OF INTEGER; I,N,M1,M2:INTEGER; PROCEDURE MAX12(VAR MAX,MAX2:INTEGER); (*PRINZIP: *) (*======== *) (*ES WERDEN TUPEL DER LAENGE LEN=2^K K=0,1,... GEBILDET, *) (*DEREN MAXIMUM STETS AN DER POSITION MIT DEM NIEDRIGSTEN*) (*INDEX IM TUPEL STEHT. DAHER KOENNEN DIE TUPEL DER *) (*LAENGE 2^(K+1) EINFACH DURCH DEN VERGLEICH DER ERSTEN *) (*ELEMENTE IM TUPEL (MIT EVTL. TAUSCH) GEBILDET WERDEN. *) (*NACH DEM ABBRUCH DES VERFAHRENS MIT LEN>=N (D.H. NACH *) (*WENIGER ALS N VERGLEICHEN) ENTHAELT A[1] DAS MAXIMUM. *) (*ANSCHLIESSEND WERDEN DIE POSITIONEN A[1+1],A[1+1+2], *) (*A[1+1+2+4],... LINEAR NACH DEM ZWEITGROESSTEN ELEMENT *) (*DURCHSUCHT, DA DIESES SICH AUFGRUND DER KONSTRUKTION *) (*DER TUPEL NUR AUF DIESEN POSITIONEN BEFINDEN KANN *) (*(ZUSAETZLICH <=LOG(N) VERGLEICHE ). *) VAR I,J,LEN,X:INTEGER; BEGIN LEN:=1; WHILE LENMAX2 THEN MAX2:=A[I]; I:=I+1 END; END;(*MAX12*) BEGIN READLN(N); FOR I:=1 TO N DO READLN(A[I]); FOR I:=1 TO N DO WRITE(A[I]);WRITELN; MAX12(M1,M2); WRITELN(M1,M2) END.