<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0680_-_K_Split</id>
	<title>0680 - K Split - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0680_-_K_Split"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0680_-_K_Split&amp;action=history"/>
	<updated>2026-05-01T14:21:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0680_-_K_Split&amp;diff=8849&amp;oldid=prev</id>
		<title>Andrada378: Pagină nouă: == Enunț == Se consideră un șir A cu N elemente întregi nenule. Numim secvență a șirului A orice succesiune de elemente aflate pe poziții consecutive în șir: Ai, Ai+1, …, Aj cu 1 ≤ i &lt; j ≤ N. Prin lungimea secvenței înțelegem numărul de elemente care o compun.  Pentru orice secvenţă Ai, Ai+1, …, Aj, vom numi split-point un indice k, i ≤ k &lt; j, care împarte secvența în două subsecvențe nevide: Ai, Ai+1, …, Ak, respectiv Ak+1, Ak+2, …, Aj.  Fi...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0680_-_K_Split&amp;diff=8849&amp;oldid=prev"/>
		<updated>2024-01-03T14:33:04Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunț == Se consideră un șir A cu N elemente întregi nenule. Numim secvență a șirului A orice succesiune de elemente aflate pe poziții consecutive în șir: Ai, Ai+1, …, Aj cu 1 ≤ i &amp;lt; j ≤ N. Prin lungimea secvenței înțelegem numărul de elemente care o compun.  Pentru orice secvenţă Ai, Ai+1, …, Aj, vom numi split-point un indice k, i ≤ k &amp;lt; j, care împarte secvența în două subsecvențe nevide: Ai, Ai+1, …, Ak, respectiv Ak+1, Ak+2, …, Aj.  Fi...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunț ==&lt;br /&gt;
Se consideră un șir A cu N elemente întregi nenule. Numim secvență a șirului A orice succesiune de elemente aflate pe poziții consecutive în șir: Ai, Ai+1, …, Aj cu 1 ≤ i &amp;lt; j ≤ N. Prin lungimea secvenței înțelegem numărul de elemente care o compun.&lt;br /&gt;
&lt;br /&gt;
Pentru orice secvenţă Ai, Ai+1, …, Aj, vom numi split-point un indice k, i ≤ k &amp;lt; j, care împarte secvența în două subsecvențe nevide: Ai, Ai+1, …, Ak, respectiv Ak+1, Ak+2, …, Aj.&lt;br /&gt;
&lt;br /&gt;
Fie Dmax valoarea absolută maximă a diferenței sumelor elementelor celor două subsecvențe separate de un split-point, luând în considerare toate secvenţele Ai,Ai+1,…,Aj posibile şi fie Lmax lungimea maximă a unei secvenţe caracterizată de valoarea Dmax.&lt;br /&gt;
&lt;br /&gt;
== Cerinţă ==&lt;br /&gt;
Cunoscând N şi valorile elementelor şirului A, să se determine Dmax şi Lmax.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare ksplit.in conține pe prima linie un număr natural N ce reprezintă numărul de elemente al șirului A, iar pe cea de-a doua linie N numere întregi nenule despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire ksplit.out va avea două linii. Prima linie conține numărul natural Dmax iar următoarea linie conţine numărul natural Lmax.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 2 ≤ N ≤ 100 000&lt;br /&gt;
* elementele șirului A sunt numere întregi nenule din intervalul [-1 000 000, 1 000 000]&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ksplitin.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
2 3 -1 5&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ksplitout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Dintre toate secvențele ce se pot forma, se alege secvența 2 3 -1, care este formată din primele 3 elemente ale șirului.&lt;br /&gt;
&lt;br /&gt;
Valoarea Dmax este 6, adică: s1 = 2 + 3 = 5, s2 = -1, Dmax = |5 – (-1)|=6, Lmax = 3.&lt;br /&gt;
&lt;br /&gt;
Se observă că există și secvența -1 5 pentru care : s1 = -1, s2 = 5, Dmax = |-1 – 5|=6 dar această secvență are lungimea 2.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
NMax = 100003&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, a):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 100000) or len(a) != n + 1 or any(not (-1000000 &amp;lt;= ai &amp;lt;= 1000000) for ai in a[1:]):&lt;br /&gt;
        print(&amp;quot;Input invalid. Vă rugăm să verificați restricțiile.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def ssm_st_dr(smax, poz, semn):&lt;br /&gt;
    smax[1] = a[1]&lt;br /&gt;
    poz[1] = 1&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        if semn * smax[i - 1] &amp;gt;= 0:&lt;br /&gt;
            smax[i] = a[i] + smax[i - 1]&lt;br /&gt;
            poz[i] = poz[i - 1]&lt;br /&gt;
        else:&lt;br /&gt;
            smax[i] = a[i]&lt;br /&gt;
            poz[i] = i&lt;br /&gt;
&lt;br /&gt;
def ssm_dr_st(smax, poz, semn):&lt;br /&gt;
    smax[n - 1] = a[n]&lt;br /&gt;
    poz[n - 1] = n&lt;br /&gt;
    for i in range(n - 2, 0, -1):&lt;br /&gt;
        if semn * smax[i + 1] &amp;gt;= 0:&lt;br /&gt;
            smax[i] = a[i + 1] + smax[i + 1]&lt;br /&gt;
            poz[i] = poz[i + 1]&lt;br /&gt;
        else:&lt;br /&gt;
            smax[i] = a[i + 1]&lt;br /&gt;
            poz[i] = i + 1&lt;br /&gt;
&lt;br /&gt;
def sol(smax, smin, pozM, pozm, semn):&lt;br /&gt;
    global Max, Lmax&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        x = semn * (smax[i] - smin[i])&lt;br /&gt;
        if x &amp;gt; Max:&lt;br /&gt;
            Max = x&lt;br /&gt;
            Lmax = semn * (pozM[i] - pozm[i])&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    sys.stdin = open(&amp;quot;ksplitin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    sys.stdout = open(&amp;quot;ksplitout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    a = [0] + list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, a):&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
    Max = -float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
    smax = [0] * NMax&lt;br /&gt;
    smin = [0] * NMax&lt;br /&gt;
    pozM = [0] * NMax&lt;br /&gt;
    pozm = [0] * NMax&lt;br /&gt;
&lt;br /&gt;
    ssm_st_dr(smax, pozM, 1)&lt;br /&gt;
    ssm_dr_st(smin, pozm, -1)&lt;br /&gt;
    sol(smax, smin, pozm, pozM, 1)&lt;br /&gt;
&lt;br /&gt;
    ssm_st_dr(smax, pozM, -1)&lt;br /&gt;
    ssm_dr_st(smin, pozm, 1)&lt;br /&gt;
    sol(smax, smin, pozM, pozm, -1)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;{Max}\n{Lmax + 1}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
</feed>