<?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=1104_-_Qvect</id>
	<title>1104 - Qvect - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1104_-_Qvect"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1104_-_Qvect&amp;action=history"/>
	<updated>2026-05-01T09:56:30Z</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=1104_-_Qvect&amp;diff=10042&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Enunt == Se consideră N vectori cu elemente întregi, numerotați de la 1 la N, sortați crescător, fiecare vector având un număr precizat de elemente. == Cerinţa == Să se răspundă la Q întrebări de tipul: a) 1 i j, cu semnificaţia: care este minimul dintre modulele diferențelor oricăror două elemente, primul element aparținând vectorului numerotat cu i, iar cel de al doilea element aparținând vectorului numerotat cu j ? b) 2 i j, cu semnificația: care e...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1104_-_Qvect&amp;diff=10042&amp;oldid=prev"/>
		<updated>2024-06-03T17:27:38Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Se consideră N vectori cu elemente întregi, numerotați de la 1 la N, sortați crescător, fiecare vector având un număr precizat de elemente. == Cerinţa == Să se răspundă la Q întrebări de tipul: a) 1 i j, cu semnificaţia: care este minimul dintre modulele diferențelor oricăror două elemente, primul element aparținând vectorului numerotat cu i, iar cel de al doilea element aparținând vectorului numerotat cu j ? b) 2 i j, cu semnificația: care e...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Se consideră N vectori cu elemente întregi, numerotați de la 1 la N, sortați crescător, fiecare vector având un număr precizat de elemente.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se răspundă la Q întrebări de tipul:&lt;br /&gt;
a) 1 i j, cu semnificaţia: care este minimul dintre modulele diferențelor oricăror două elemente, primul element aparținând vectorului numerotat cu i, iar cel de al doilea element aparținând vectorului numerotat cu j ?&lt;br /&gt;
b) 2 i j, cu semnificația: care este valoarea ce se găsește pe poziția mediană în vectorul obținut prin interclasarea vectorilor având numerele de ordine i,i+1,…,j (i&amp;lt;j).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare qvect.in conţine pe prima linie două numerele naturale N Q, separate printr-un spațiu, ce reprezintă numărul de vectori, respectiv numărul de întrebări.&lt;br /&gt;
&lt;br /&gt;
Pe fiecare dintre următoarele N linii se găsește descrierea unui vector sub forma: k a1 a2 … ak, unde k reprezintă numărul de elemente, iar a1 a2 … ak reprezintă elementele vectorului, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
Pe fiecare dintre următoarele Q linii se găsește descrierea unei întrebări sub forma unui triplet de numere naturale: t i j, separate prin câte un spațiu, unde t reprezintă tipul întrebării şi poate lua numai valorile 1 sau 2, iar i și j au semnificația precizată în cerinţă.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieşire qvect.out va conţine Q numere întregi, câte unul pe linie, reprezentând în ordine, răspunsurile la cele Q întrebări.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ N, i, j ≤ 100&lt;br /&gt;
* 1 ≤ Q ≤ 1000&lt;br /&gt;
* 1 ≤ t ≤ 2&lt;br /&gt;
* 1 ≤ k ≤ 5000&lt;br /&gt;
* -1 000 000 000 ≤ ap ≤ 1 000 000 000&lt;br /&gt;
* Prin valoarea aflată pe poziția mediană a unui vector a cu k elemente se înțelege valoarea elementului situat pe poziţia [k/2], adică partea întreagă a lui k / 2.&lt;br /&gt;
* 15% dintre teste vor conține numai întrebări de tipul 1&lt;br /&gt;
* 15% dintre teste vor conține numai întrebări de tipul 2&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; qvect.in&lt;br /&gt;
 3 3&lt;br /&gt;
 7 1 4 5 8 11 18 19&lt;br /&gt;
 6 2 4 5 10 21 29&lt;br /&gt;
 4 13 14 15 15&lt;br /&gt;
 2 2 3&lt;br /&gt;
 1 2 3&lt;br /&gt;
 2 1 3&lt;br /&gt;
; qvect.out&lt;br /&gt;
 13&lt;br /&gt;
 3&lt;br /&gt;
 10&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Prima întrebare este de tipul 2. Vectorul nou obținut prin interclasarea vectorilor numerotați cu 2 și cu 3 este următorul: 2,4,5,10,13,14,15,15,21,29 și conține 6+4=10 elemente, valoarea elementului median este 13&lt;br /&gt;
&lt;br /&gt;
A doua întrebare este de tipul 1. Diferența minimă se obține pentru perechea (10,13), unde valoarea 10 aparține vectorului numerotat cu 2, iar valoarea 13 aparține vectorului numerotat cu 3.&lt;br /&gt;
&lt;br /&gt;
A treia întrebare este de tipul 2. Poziția mediană în vectorul nou obținut prin interclasare este (7+6+4)/2 = 8, deci valoarea ce se găsește pe poziția mediană este 10.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def find_min_difference(vector1, vector2):&lt;br /&gt;
    min_diff = float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
    i, j = 0, 0&lt;br /&gt;
    while i &amp;lt; len(vector1) and j &amp;lt; len(vector2):&lt;br /&gt;
        diff = abs(vector1[i] - vector2[j])&lt;br /&gt;
        min_diff = min(min_diff, diff)&lt;br /&gt;
        if vector1[i] &amp;lt; vector2[j]:&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            j += 1&lt;br /&gt;
    return min_diff&lt;br /&gt;
&lt;br /&gt;
def merge_and_find_median(vector1, vector2):&lt;br /&gt;
    merged_vector = []&lt;br /&gt;
    i, j = 0, 0&lt;br /&gt;
    while i &amp;lt; len(vector1) and j &amp;lt; len(vector2):&lt;br /&gt;
        if vector1[i] &amp;lt; vector2[j]:&lt;br /&gt;
            merged_vector.append(vector1[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            merged_vector.append(vector2[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    merged_vector.extend(vector1[i:])&lt;br /&gt;
    merged_vector.extend(vector2[j:])&lt;br /&gt;
    median_index = len(merged_vector) // 2&lt;br /&gt;
    return merged_vector[median_index]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;qvect.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        N, Q = map(int, fin.readline().split())&lt;br /&gt;
        vectors = [list(map(int, fin.readline().split()))[1:] for _ in range(N)]&lt;br /&gt;
        queries = [tuple(map(int, fin.readline().split())) for _ in range(Q)]&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;qvect.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        for query in queries:&lt;br /&gt;
            t, i, j = query&lt;br /&gt;
            if t == 1:&lt;br /&gt;
                min_diff = find_min_difference(vectors[i-1], vectors[j-1])&lt;br /&gt;
                fout.write(f&amp;quot;{min_diff}\n&amp;quot;)&lt;br /&gt;
            elif t == 2:&lt;br /&gt;
                median = merge_and_find_median(vectors[i-1], vectors[j-1])&lt;br /&gt;
                fout.write(f&amp;quot;{median}\n&amp;quot;)&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>AjM</name></author>
	</entry>
</feed>