Thứ Ba, 3 tháng 5, 2022

SZERO PASCAL

const
   fin = 'szero.inp';   fon = 'szero.out';
   maxn = 100000;vc=10000000;
type pt  = record
   cs:longint;gt:int64;
   end;
var
        a:array[1..maxn] of longint;
    s:array[0..maxn] of pt;
   n,i,k,j,im,jm:longint;

procedure nhap;
var i:longint;
begin
        readln(n);
        for i:=1 to n do read(a[i]);
end;

procedure tinh_s;
var i:longint;
begin
        s[0].gt:=0;s[0].cs:=0;
        for i:=1 to n do
        begin
                s[i].cs:=i;
                s[i].gt:=s[i-1].gt+a[i];
        end;
end;

function ss(x,y:pt):boolean;
begin
        if x.gt<y.gt then exit(true);
        if x.gt>y.gt then exit(false);
        if x.cs<y.cs then exit(true);
        if x.cs>y.cs then exit(false);
        exit(false);
end;

procedure qs(l,h:longint);
var     i,j:longint;
        x,t:pt;
begin
        x:=s[l+random(h-l+1)];
        i:=l;j:=h;
        repeat
                while ss(s[i],x)=true do inc(i);
                while ss(x,s[j])=true do dec(j);
                if i<=j then
                begin
                        t:=s[i]; s[i]:=s[j]; s[j]:=t;
                        inc(i);  dec(j);
                end;
        until i>j;
   if L<j then qs(L,j);
   if i<H then qs(i,H);
   end;

procedure xl;
var i,k,x,y:longint;
begin
        tinh_s;
        qs(0,n);
        k:=0;x:=0;y:=0;
        for i:=1 to n do
        begin
               if s[i].gt<>s[i-1].gt then //ket thuc 1 doan
                k:=i;
            if s[i].cs-s[k].cs>s[y].cs-s[x].cs then
            begin
                x:=k;
                y:=i;
            end;
        end;
        write(s[x].cs+1,' ',s[y].cs);
end;
begin
        randomize;
        assign(input,fin);reset(input);
        assign(output,fon);rewrite(output);
        nhap;
        xl;
end.

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.