V11WATER - Nước đọng

Tác giả: ladpro98

Ngôn ngữ: Pascal

program v11water;
uses    math;
var     a,m1,m2:array[0..123456] of longint;
        n:longint;
        res:int64;

procedure input;
var     inp:text;
        i:longint;
begin
        assign(inp,'');
        reset(inp);
        readln(inp,n);
        for i:=1 to n do
        read(inp,a[i]);
        close(inp);
end;

procedure init;
var     i:longint;
begin
        m1[1]:=a[1];
        for i:=2 to n do m1[i]:=max(m1[i-1],a[i]);
        m2[n]:=a[n];
        for i:=n-1 downto 1 do m2[i]:=max(m2[i+1],a[i]);
end;

procedure calc;
var     i,m:longint;
begin
        for i:=2 to n-1 do
        begin
                m:=min(m1[i-1],m2[i+1]);
                if m>a[i] then
                res:=res+m-a[i];
        end;
end;

begin
        input;
        init;
        calc;
        write(res);
end.

Download