program sushi;
Uses Math;
const MAXN=100002;
type piatto = record
inizio:longint;
durata:longint;
peso:longint;
fine:int64;
end;
elenco = array[0.. MAXN-1] of int64;
table = array[0..MAXN-1] of piatto;
var N,i,j, id:Longint;
ricordafine, quantomangio, ricordoquantomangiato:int64;
T : table;
S,W,D,E, ricordaindice, ricordaindice2:elenco; (*array riferiti ai piatti Start, Weigth, Durata, End*)
Procedure scambia (var a,b: int64);
var x:int64;
begin
x:=a;
a:=b;
b:=x;
end;
Procedure ordinamento (estremoi,estremos: int64; var v : elenco; var u:elenco; ordinato:boolean);
var inf, sup, medio:int64;
pivot :int64;
begin
inf:=estremoi;
sup:=estremos;
medio:= (estremoi+estremos) div 2;
pivot:=v[medio];
repeat
if (ordinato) then
begin
while (v[inf]<pivot) do inf:=inf+1;
while (v[sup]>pivot) do sup:=sup-1;
end;
if inf<=sup then
begin
scambia(v[inf],v[sup]);
scambia(u[inf],u[sup]);
inf:=inf+1;
sup:=sup-1;
end;
until inf>sup;
if (estremoi<sup) then ordinamento(estremoi,sup,v,u,ordinato);
if (inf<estremos) then ordinamento(inf,estremos,v,u,ordinato);
end;
Procedure ricerca (var w:elenco; target:int64);
var m,start,eend: qword;
begin
start:=0; eend:=N-1 ;
repeat
m:=(start + eend) div 2;
if w[m]<target then start:=m+1
else if w[m]>=target then begin id:=m; eend:=m-1; end;
until start>eend;
if start>N-1 then id:=-1;
end;
begin
(*assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);*)
readln(N);
for i:=0 to N-1 do begin ricordaindice[i]:=i; ricordaindice2[i]:=i; end;
for i:=0 to N-1 do
begin
{ dish on table }
readln(S[i],W[i],D[i]);
E[i]:=S[i]+D[i];
T[i].inizio:=S[i];
T[i].durata:=D[i];
T[i].peso:=W[i];
T[i].fine:=E[i];
end;
ordinamento(0,N-1,E, ricordaindice,true);
ordinamento(0,N-1,S, ricordaindice2,true);
for i:=0 to N-1 do write(S[i],' ', ricordaindice2[i],' '); writeln;
for i:=0 to N-1 do write(E[i],' ', ricordaindice[i],' '); writeln;
ricordoquantomangiato:=0;
for i:=0 to N-1 do
begin
writeln('indice i ',i,' ',E[i]);
quantomangio:=T[ricordaindice[i]].peso;;
ricordafine:=E[i];
while ricordafine<=S[N-1] do
begin
ricerca(S, ricordafine);
if ricordafine <=E[N-1] then begin
writeln('ident ',id);
writeln('indice trov ',ricordaindice2[id]);
writeln('peso ',T[ricordaindice2[id]].peso);
quantomangio:=quantomangio+T[ricordaindice2[id]].peso;
ricordafine:=ricordafine+T[ricordaindice2[id]].durata;
writeln('ricordafine ',ricordafine);
writeln(' quantomangiato ',quantomangio); end;
end;
if quantomangio>ricordoquantomangiato then ricordoquantomangiato:=quantomangio;
end;
writeln(ricordoquantomangiato);
end.
cHJvZ3JhbSBzdXNoaTsKVXNlcyBNYXRoOwpjb25zdCBNQVhOPTEwMDAwMjsKdHlwZSBwaWF0dG8gPSByZWNvcmQKICAgICAgICAgICAgICAgICAgIGluaXppbzpsb25naW50OwogICAgICAgICAgICAgICAgICAgZHVyYXRhOmxvbmdpbnQ7CiAgICAgICAgICAgICAgICAgICBwZXNvOmxvbmdpbnQ7CiAgICAgICAgICAgICAgICAgICBmaW5lOmludDY0OwogICAgICAgICAgICAgICAgZW5kOwogICAgIGVsZW5jbyA9IGFycmF5WzAuLiBNQVhOLTFdIG9mIGludDY0OyAgICAgICAgICAgCiAgICAgdGFibGUgPSBhcnJheVswLi5NQVhOLTFdIG9mIHBpYXR0bzsgICAgICAgICAgCnZhciBOLGksaiwgaWQ6TG9uZ2ludDsKICAgIHJpY29yZGFmaW5lLCBxdWFudG9tYW5naW8sIHJpY29yZG9xdWFudG9tYW5naWF0bzppbnQ2NDsKICAgIFQgOiB0YWJsZTsgCiAgICBTLFcsRCxFLCByaWNvcmRhaW5kaWNlLCByaWNvcmRhaW5kaWNlMjplbGVuY287ICAoKmFycmF5IHJpZmVyaXRpIGFpIHBpYXR0aSBTdGFydCwgV2VpZ3RoLCBEdXJhdGEsIEVuZCopCiAgICAKUHJvY2VkdXJlIHNjYW1iaWEgKHZhciBhLGI6IGludDY0KTsKdmFyIHg6aW50NjQ7CmJlZ2luCiAgIHg6PWE7CiAgIGE6PWI7CiAgIGI6PXg7CmVuZDsgIAoKUHJvY2VkdXJlIG9yZGluYW1lbnRvIChlc3RyZW1vaSxlc3RyZW1vczogaW50NjQ7IHZhciB2IDogZWxlbmNvOyB2YXIgdTplbGVuY287IG9yZGluYXRvOmJvb2xlYW4pOwp2YXIgaW5mLCBzdXAsIG1lZGlvOmludDY0OwogICAgcGl2b3QgOmludDY0OwpiZWdpbgogICAgaW5mOj1lc3RyZW1vaTsKICAgIHN1cDo9ZXN0cmVtb3M7CiAgICBtZWRpbzo9IChlc3RyZW1vaStlc3RyZW1vcykgZGl2IDI7CiAgICBwaXZvdDo9dlttZWRpb107CiAgICByZXBlYXQKICAgICAgaWYgKG9yZGluYXRvKSB0aGVuCiAgICAgICAgIGJlZ2luCiAgICAgICAgICAgIHdoaWxlICh2W2luZl08cGl2b3QpIGRvICBpbmY6PWluZisxOwogICAgICAgICAgICB3aGlsZSAodltzdXBdPnBpdm90KSBkbyAgc3VwOj1zdXAtMTsKICAgICAgICAgZW5kOwogICAgICBpZiBpbmY8PXN1cCB0aGVuCiAgICAgICBiZWdpbgogICAgICAgICBzY2FtYmlhKHZbaW5mXSx2W3N1cF0pOwogICAgICAgICBzY2FtYmlhKHVbaW5mXSx1W3N1cF0pOwogICAgICAgICBpbmY6PWluZisxOwogICAgICAgICBzdXA6PXN1cC0xOwogICAgICAgZW5kOwogICAgdW50aWwgaW5mPnN1cDsKICAgIGlmIChlc3RyZW1vaTxzdXApIHRoZW4gb3JkaW5hbWVudG8oZXN0cmVtb2ksc3VwLHYsdSxvcmRpbmF0byk7CiAgICBpZiAoaW5mPGVzdHJlbW9zKSB0aGVuIG9yZGluYW1lbnRvKGluZixlc3RyZW1vcyx2LHUsb3JkaW5hdG8pOwplbmQ7ClByb2NlZHVyZSByaWNlcmNhICh2YXIgdzplbGVuY287IHRhcmdldDppbnQ2NCk7IAogIHZhciBtLHN0YXJ0LGVlbmQ6IHF3b3JkOwogICAgICAKIGJlZ2luICAKICAgc3RhcnQ6PTA7IGVlbmQ6PU4tMSA7CiAgIHJlcGVhdAogICAgICBtOj0oc3RhcnQgKyBlZW5kKSBkaXYgMjsKICAgICAgaWYgd1ttXTx0YXJnZXQgdGhlbiBzdGFydDo9bSsxCiAgICAgICAgICAgICAgICAgICAgIGVsc2UgIGlmIHdbbV0+PXRhcmdldCB0aGVuIGJlZ2luIGlkOj1tOyAgZWVuZDo9bS0xOyBlbmQ7CiAgICB1bnRpbCBzdGFydD5lZW5kOwogICAgaWYgc3RhcnQ+Ti0xIHRoZW4gaWQ6PS0xOwogICAgZW5kOwoKYmVnaW4KICAgKCphc3NpZ24oaW5wdXQsICAnaW5wdXQudHh0Jyk7ICByZXNldChpbnB1dCk7CiAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsqKQogICByZWFkbG4oTik7CiAgIGZvciBpOj0wIHRvIE4tMSBkbyBiZWdpbiByaWNvcmRhaW5kaWNlW2ldOj1pOyByaWNvcmRhaW5kaWNlMltpXTo9aTsgZW5kOwogICBmb3IgaTo9MCB0byBOLTEgZG8KICAgICAgYmVnaW4KICAgICAgICB7IGRpc2ggb24gdGFibGUgfQogICAgICAgICByZWFkbG4oU1tpXSxXW2ldLERbaV0pOwogICAgICAgICBFW2ldOj1TW2ldK0RbaV07CiAgICAgICAgIFRbaV0uaW5pemlvOj1TW2ldOwogICAgICAgICBUW2ldLmR1cmF0YTo9RFtpXTsKICAgICAgICAgVFtpXS5wZXNvOj1XW2ldOwogICAgICAgICBUW2ldLmZpbmU6PUVbaV07CiAgICAgIGVuZDsKICAgIG9yZGluYW1lbnRvKDAsTi0xLEUsIHJpY29yZGFpbmRpY2UsdHJ1ZSk7CiAgICBvcmRpbmFtZW50bygwLE4tMSxTLCByaWNvcmRhaW5kaWNlMix0cnVlKTsKICAgIGZvciBpOj0wIHRvIE4tMSBkbyB3cml0ZShTW2ldLCcgJywgcmljb3JkYWluZGljZTJbaV0sJyAnKTsgd3JpdGVsbjsKICAgIGZvciBpOj0wIHRvIE4tMSBkbyB3cml0ZShFW2ldLCcgJywgcmljb3JkYWluZGljZVtpXSwnICcpOyB3cml0ZWxuOwogICAgcmljb3Jkb3F1YW50b21hbmdpYXRvOj0wOwogICAgZm9yIGk6PTAgdG8gTi0xIGRvCiAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgd3JpdGVsbignaW5kaWNlIGkgJyxpLCcgJyxFW2ldKTsKICAgICAgICAgICAgICAgICAgIHF1YW50b21hbmdpbzo9VFtyaWNvcmRhaW5kaWNlW2ldXS5wZXNvOzsKICAgICAgICAgICAgICAgICAgIHJpY29yZGFmaW5lOj1FW2ldOyAKICAgICAgICAgICAgICAgICAgIHdoaWxlIHJpY29yZGFmaW5lPD1TW04tMV0gZG8KICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIAogICAgICAgICAgICAgICAgICAgICAgICByaWNlcmNhKFMsIHJpY29yZGFmaW5lKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmljb3JkYWZpbmUgPD1FW04tMV0gdGhlbiBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICB3cml0ZWxuKCdpZGVudCAgJyxpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbG4oJ2luZGljZSB0cm92ICcscmljb3JkYWluZGljZTJbaWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVsbigncGVzbyAnLFRbcmljb3JkYWluZGljZTJbaWRdXS5wZXNvKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRvbWFuZ2lvOj1xdWFudG9tYW5naW8rVFtyaWNvcmRhaW5kaWNlMltpZF1dLnBlc287CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmljb3JkYWZpbmU6PXJpY29yZGFmaW5lK1Rbcmljb3JkYWluZGljZTJbaWRdXS5kdXJhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbG4oJ3JpY29yZGFmaW5lICAnLHJpY29yZGFmaW5lKTsgIAogICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICB3cml0ZWxuKCcgcXVhbnRvbWFuZ2lhdG8gJyxxdWFudG9tYW5naW8pOyBlbmQ7CiAgICAgICAgICAgICAgICAgICBlbmQ7IAogICAgICAgICAgICAgICAgICAgaWYgcXVhbnRvbWFuZ2lvPnJpY29yZG9xdWFudG9tYW5naWF0byB0aGVuIHJpY29yZG9xdWFudG9tYW5naWF0bzo9cXVhbnRvbWFuZ2lvOwogICAgICAgICAgICAgICBlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgd3JpdGVsbihyaWNvcmRvcXVhbnRvbWFuZ2lhdG8pOyAgIAplbmQu