NKSEQ - Dãy số

Tác giả: ladpro98

Ngôn ngữ: Pascal

program nkseq_AC;
uses    math;
const   fi='';
var     a,left,right,minleft,minright:array[0..100001] of longint;
        n,res:longint;

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

procedure init;
var     i:longint;
begin
        left[1]:=a[1];
        for i:=2 to n do left[i]:=left[i-1]+a[i];
        right[n]:=a[n];
        for i:=n-1 downto 1 do right[i]:=right[i+1]+a[i];
        minleft[1]:=left[1];
        for i:=2 to n do
                minleft[i]:=min(minleft[i-1],left[i]);
        minright[n]:=left[n];
        for i:=n-1 downto 1 do
                minright[i]:=min(minright[i+1],left[i]);




end;

procedure process;
var     i:longint;
begin

        for i:=1 to n do
        begin
                if (minleft[i-1]+right[i]>0) and (minright[i]-left[i-1]>0)
                then inc(res);
        end;
end;

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

Download