2094 - Actualizare Element, CMMDC Interval
Enunt[edit | edit source]
Se dă un șir de numere asupra căruia se pot face două tipuri de operații: actualizare a unui element (schimbarea valorii sale) și interogarea unui interval de indici (determinarea celui mai mare divizor comun pentru valorile aflate între cei doi indici, inclusiv).
Cerinţa[edit | edit source]
Afișați răspunsul la fiecare interogare.
Date de intrare[edit | edit source]
Prima linie a fisierului aecmmdci.in conține un număr N, ce reprezintă lungimea șirului dat. Linia a doua conține, separate prin câte un spațiu, elementele șirului dat. Pe linia a treia se află un număr M ce reprezintă numărul de operații ce se efectuează asupra șirului dat. Pe fiecare din următoarele M linii se găsesc câte 3 numere naturale separate prin câte un spațiu: T A B. Dacă T = 1 operația este de interogare iar A și B sunt capetele inrervalului. Dacă T = 2 operația este de actualizare cu semnificația: elementul de pe poziția A devine B.
Date de ieșire[edit | edit source]
Fișierul aecmmdci.out conține pe câte o linie răspunsul la căte o operațe de tip 1, în ordinea în care acestea apar în datele de intrare.
Restricţii şi precizări[edit | edit source]
- 1 ≤ N ≤ 100000
- 1 ≤ M ≤ 100000
- 1 ≤ A ≤ B ≤ N
- elementele șirului dat sunt indexate de la 1
- elementele șirului dat, precum și cele de la operațiile de actualizare, sunt strict pozitive <= 2000000000
Exemplu[edit | edit source]
- aecmmdci.in
5 2 12 6 9 8 3 1 2 4 2 4 2 1 2 4
- aecmmdci.out
3 2
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def gcd(a, b):
while b: a, b = b, a % b return a
def main():
with open("aecmmdci.in", "r") as fin, open("aecmmdci.out", "w") as fout: n = int(fin.readline()) arr = list(map(int, fin.readline().split())) last_update = {i + 1: val for i, val in enumerate(arr)}
m = int(fin.readline()) for _ in range(m): op, a, b = map(int, fin.readline().split()) if op == 1: result = gcd(last_update[a], last_update[b]) fout.write(f"{result}\n") elif op == 2: last_update[a] = b
if __name__ == "__main__":
main()
</syntaxhighlight>