<?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=3876_-_sum_max_min</id>
	<title>3876 - sum max min - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3876_-_sum_max_min"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3876_-_sum_max_min&amp;action=history"/>
	<updated>2026-05-02T06:03:43Z</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=3876_-_sum_max_min&amp;diff=10105&amp;oldid=prev</id>
		<title>Danciu: Pagină nouă:  = Cerința = Se dă un șir de &lt;code&gt;N&lt;/code&gt; numere întregi. Pentru fiecare subșir nevid al șirului dat se consideră valoarea întreagă &lt;code&gt;D&lt;/code&gt; egală cu diferența dintre elementul maxim și cel minim aflat în subșir. Să se afle suma valorilor &lt;code&gt;D&lt;/code&gt; ale tuturor subșirurilor nevide, mai mici sau egale decât un număr întreg &lt;code&gt;T&lt;/code&gt; dat modulo .  = Date de intrare = Programul citește de la tastatură numerele &lt;code&gt;N&lt;/code&gt; și &lt;code&gt;T&lt;/cod...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3876_-_sum_max_min&amp;diff=10105&amp;oldid=prev"/>
		<updated>2024-06-04T08:30:38Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă:  = Cerința = Se dă un șir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere întregi. Pentru fiecare subșir nevid al șirului dat se consideră valoarea întreagă &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; egală cu diferența dintre elementul maxim și cel minim aflat în subșir. Să se afle suma valorilor &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; ale tuturor subșirurilor nevide, mai mici sau egale decât un număr întreg &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; dat modulo .  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;T&amp;lt;/cod...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Se dă un șir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere întregi. Pentru fiecare subșir nevid al șirului dat se consideră valoarea întreagă &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; egală cu diferența dintre elementul maxim și cel minim aflat în subșir. Să se afle suma valorilor &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; ale tuturor subșirurilor nevide, mai mici sau egale decât un număr întreg &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; dat modulo .&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, iar apoi &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere întregi, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran valoarea cerută în enunț.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N, T ≤ 1.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere citite vor fi din intervalul &amp;lt;code&amp;gt;[0, 1.000.000]&amp;lt;/code&amp;gt;&lt;br /&gt;
* se numește subșir al unui șir o succesiune de elemente(nu neapărat consecutive în acesta) ale acestuia, considerate în ordinea în care apar în șir&lt;br /&gt;
* pentru teste în valoare de &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt; de puncte &amp;lt;code&amp;gt;N ≤ 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 5 2&lt;br /&gt;
 1 7 2 3 4&lt;br /&gt;
Ieșire&lt;br /&gt;
 11&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Dacă considerăm șirul indexat de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, un exemplu de subșir ce respectă condiția din enunț este cel format din elementele de pe pozițiile &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; fiind egal în acest caz cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, deci egal cu &amp;lt;code&amp;gt;T = 2&amp;lt;/code&amp;gt;. Un alt subșir bun este cel format de elementele de pe pozițiile &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, respectiv &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; fiind egal în acest caz cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, deci mai mic decât &amp;lt;code&amp;gt;T = 2&amp;lt;/code&amp;gt;. Subșirul format de elementele de pe pozițiile &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; nu respectă condiția din enunț pentru că în cazul acestuia &amp;lt;code&amp;gt;D = 5 &amp;gt; T = 2&amp;lt;/code&amp;gt;. Analizând toate subșirurile se obține în final suma &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
MOD = 1000000007 &lt;br /&gt;
&lt;br /&gt;
def calculate_subarray_sums(n, t, numbers):&lt;br /&gt;
    total_sum = 0  # Initialize total sum&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        max_so_far = numbers[i]&lt;br /&gt;
        min_so_far = numbers[i]&lt;br /&gt;
        subarray_count = 1&lt;br /&gt;
&lt;br /&gt;
        for j in range(i + 1, n):&lt;br /&gt;
            max_so_far = max(max_so_far, numbers[j])&lt;br /&gt;
            min_so_far = min(min_so_far, numbers[j])&lt;br /&gt;
&lt;br /&gt;
            difference = max_so_far - min_so_far&lt;br /&gt;
&lt;br /&gt;
            if difference &amp;lt;= t:&lt;br /&gt;
                contribution = (subarray_count * difference) % MOD&lt;br /&gt;
&lt;br /&gt;
                total_sum = (total_sum + contribution) % MOD&lt;br /&gt;
&lt;br /&gt;
                subarray_count += 1&lt;br /&gt;
&lt;br /&gt;
    return total_sum&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, t = map(int, input().split())&lt;br /&gt;
    numbers = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    subarray_sum = calculate_subarray_sums(n, t, numbers)&lt;br /&gt;
    print(subarray_sum)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danciu</name></author>
	</entry>
</feed>