<?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=3600_-_Numbers_Tree</id>
	<title>3600 - Numbers Tree - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3600_-_Numbers_Tree"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3600_-_Numbers_Tree&amp;action=history"/>
	<updated>2026-05-01T13:11:13Z</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=3600_-_Numbers_Tree&amp;diff=9965&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Cerinţa == Se dă un șir a de n numere naturale nenule strict mai mari decât 1, indexat de la 1. Asupra acestui șir se aplică 3 tipuri de operații: * 1 st dr val – toate valorile a[i] cu i din intervalul [st, dr] devin egale cu val; * 2 st dr – se cere să se afle câte elemente ale șirului a care au indicii aflați în intervalul [st, dr] sunt numere compuse(un număr natural este compus dacă are cel puțin 3 divizori); * 3 st dr – se cere să se afișeze lu...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3600_-_Numbers_Tree&amp;diff=9965&amp;oldid=prev"/>
		<updated>2024-06-03T15:33:40Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Se dă un șir a de n numere naturale nenule strict mai mari decât 1, indexat de la 1. Asupra acestui șir se aplică 3 tipuri de operații: * 1 st dr val – toate valorile a[i] cu i din intervalul [st, dr] devin egale cu val; * 2 st dr – se cere să se afle câte elemente ale șirului a care au indicii aflați în intervalul [st, dr] sunt numere compuse(un număr natural este compus dacă are cel puțin 3 divizori); * 3 st dr – se cere să se afișeze lu...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir a de n numere naturale nenule strict mai mari decât 1, indexat de la 1. Asupra acestui șir se aplică 3 tipuri de operații:&lt;br /&gt;
* 1 st dr val – toate valorile a[i] cu i din intervalul [st, dr] devin egale cu val;&lt;br /&gt;
* 2 st dr – se cere să se afle câte elemente ale șirului a care au indicii aflați în intervalul [st, dr] sunt numere compuse(un număr natural este compus dacă are cel puțin 3 divizori);&lt;br /&gt;
* 3 st dr – se cere să se afișeze lungimea cele mai lungi secvențe de numere prime alcătuită exclusiv din elemente ale șirului care au indicii aflați în intervalul [st, dr](o secvență a unui șir este alcătuită din elemente aflate poziții consecutive).&lt;br /&gt;
Dându-se Q operații, să se raspundă în ordine la cele de tip 2 și 3.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare numbers_tree.in conține pe prima linie numerele n și Q, reprezentând numărul de elemente ale șirului a, respectiv numărul de operații, pe a doua linie n numere naturale separate prin spații reprezentând elementele șirului inițial, iar pe următoarele Q linii sunt descrise operațiile.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire numbers_tree.out va conține pe câte o linie răspunsurile la operațiile de tip 2 și 3 în ordinea în care acestea apar în fișierul de intrare.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n, Q ≤ 100.000&lt;br /&gt;
* 2 ≤ a[i], val ≤ 1.000.000&lt;br /&gt;
* 1 ≤ st ≤ dr ≤ n&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; numbers_tree.in&lt;br /&gt;
 7 7&lt;br /&gt;
 2 3 4 5 6 7 8&lt;br /&gt;
 2 1 7&lt;br /&gt;
 3 1 7&lt;br /&gt;
 1 2 5 4&lt;br /&gt;
 2 2 5&lt;br /&gt;
 3 2 5&lt;br /&gt;
 1 2 4 3&lt;br /&gt;
 3 1 6&lt;br /&gt;
; numbers_tree.out&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
 4&lt;br /&gt;
 0&lt;br /&gt;
 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def read_input(filename):&lt;br /&gt;
    with open(filename, &amp;#039;r&amp;#039;) as f:&lt;br /&gt;
        n, Q = map(int, f.readline().split())&lt;br /&gt;
        a = list(map(int, f.readline().split()))&lt;br /&gt;
        operations = [list(map(int, line.split())) for line in f.readlines()]&lt;br /&gt;
    return n, a, operations&lt;br /&gt;
&lt;br /&gt;
def is_prime(num):&lt;br /&gt;
    if num &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(num ** 0.5) + 1):&lt;br /&gt;
        if num % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def apply_operation_2(a, st, dr):&lt;br /&gt;
    count_composite = 0&lt;br /&gt;
    for i in range(st - 1, dr):&lt;br /&gt;
        if a[i] &amp;gt; 1 and not is_prime(a[i]):&lt;br /&gt;
            count_composite += 1&lt;br /&gt;
    return count_composite&lt;br /&gt;
&lt;br /&gt;
def apply_operation_3(a, st, dr):&lt;br /&gt;
    max_prime_sequence = 0&lt;br /&gt;
    current_prime_sequence = 0&lt;br /&gt;
    for i in range(st - 1, dr):&lt;br /&gt;
        if is_prime(a[i]):&lt;br /&gt;
            current_prime_sequence += 1&lt;br /&gt;
            max_prime_sequence = max(max_prime_sequence, current_prime_sequence)&lt;br /&gt;
        else:&lt;br /&gt;
            current_prime_sequence = 0&lt;br /&gt;
    return max_prime_sequence&lt;br /&gt;
&lt;br /&gt;
def process_operations(n, a, operations):&lt;br /&gt;
    result = []&lt;br /&gt;
    for op in operations:&lt;br /&gt;
        if op[0] == 2:&lt;br /&gt;
            count_composite = apply_operation_2(a, op[1], op[2])&lt;br /&gt;
            result.append(count_composite)&lt;br /&gt;
        elif op[0] == 3:&lt;br /&gt;
            max_prime_sequence = apply_operation_3(a, op[1], op[2])&lt;br /&gt;
            result.append(max_prime_sequence)&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def write_output(filename, result):&lt;br /&gt;
    with open(filename, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
        for res in result:&lt;br /&gt;
            f.write(str(res) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_file = &amp;quot;numbers_tree.in&amp;quot;&lt;br /&gt;
    output_file = &amp;quot;numbers_tree.out&amp;quot;&lt;br /&gt;
    n, a, operations = read_input(input_file)&lt;br /&gt;
    result = process_operations(n, a, operations)&lt;br /&gt;
    write_output(output_file, result)&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>