<?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=3526_-_StringQuery</id>
	<title>3526 - StringQuery - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3526_-_StringQuery"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3526_-_StringQuery&amp;action=history"/>
	<updated>2026-05-01T09:01:09Z</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=3526_-_StringQuery&amp;diff=9966&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Cerinţa == Se dă un string s de lungime n și q query-uri de forma (op, x, y), unde op poate fi 0 sau 1. Dacă op este egal cu 1, atunci caracterul de pe poziția x din s va deveni y. Dacă op este egal cu 0, se va afișa numărul de caractere distincte ale lui s din intervalul [x, y]. == Date de intrare == Programul citește de la tastatură n, s, q si cele q query-uri. == Date de ieșire == Programul va afișa pe ecran raspunsurile la query-urile de tipul 0, fiecare pe...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3526_-_StringQuery&amp;diff=9966&amp;oldid=prev"/>
		<updated>2024-06-03T15:38:34Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Se dă un string s de lungime n și q query-uri de forma (op, x, y), unde op poate fi 0 sau 1. Dacă op este egal cu 1, atunci caracterul de pe poziția x din s va deveni y. Dacă op este egal cu 0, se va afișa numărul de caractere distincte ale lui s din intervalul [x, y]. == Date de intrare == Programul citește de la tastatură n, s, q si cele q query-uri. == Date de ieșire == Programul va afișa pe ecran raspunsurile la query-urile de tipul 0, fiecare pe...&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 string s de lungime n și q query-uri de forma (op, x, y), unde op poate fi 0 sau 1. Dacă op este egal cu 1, atunci caracterul de pe poziția x din s va deveni y. Dacă op este egal cu 0, se va afișa numărul de caractere distincte ale lui s din intervalul [x, y].&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură n, s, q si cele q query-uri.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran raspunsurile la query-urile de tipul 0, fiecare pe linie nouă.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 5.000.000&lt;br /&gt;
* 1 ≤ q ≤ 250.000&lt;br /&gt;
* s este format doar din litere mici ale alfabetului englez&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 4&lt;br /&gt;
 aaaa&lt;br /&gt;
 4&lt;br /&gt;
 1 2 b&lt;br /&gt;
 1 3 c&lt;br /&gt;
 0 1 2&lt;br /&gt;
 0 2 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
După primele 2 operatii, s = &amp;quot;abca&amp;quot;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def distinct_characters_in_range(s, x, y):&lt;br /&gt;
    count = {}&lt;br /&gt;
    for i in range(x - 1, y):&lt;br /&gt;
        if s[i] not in count:&lt;br /&gt;
            count[s[i]] = 1&lt;br /&gt;
    return len(count)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți lungimea șirului: &amp;quot;))&lt;br /&gt;
    s = input(&amp;quot;Introduceți șirul: &amp;quot;)&lt;br /&gt;
    q = int(input(&amp;quot;Introduceți numărul de query-uri: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    for _ in range(q):&lt;br /&gt;
        op, x, y = map(int, input().split())&lt;br /&gt;
        if op == 1:&lt;br /&gt;
            s = s[:x - 1] + chr(y) + s[x:]&lt;br /&gt;
        elif op == 0:&lt;br /&gt;
            result = distinct_characters_in_range(s, x, y)&lt;br /&gt;
            print(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>