2094 - Actualizare Element, CMMDC Interval

From Bitnami MediaWiki
Revision as of 15:42, 3 June 2024 by AjM (talk | contribs) (Pagină nouă: == Enunt == 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 == Afișați răspunsul la fiecare interogare. == Date de intrare == Prima linie a fisierului aecmmdci.in conține un număr N, ce reprezintă lungimea șirului dat. Linia a doua conț...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>