2090 - Actualizare Element, Minim Interval

From Bitnami MediaWiki
Revision as of 22:40, 4 January 2024 by Benea Coralia (talk | contribs) (Pagină nouă: 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 celei mai mici valori aflate între cei doi indici, inclusiv). == Cerinţa == Afișați răspunsul la fiecare interogare. == Date de intrare == Prima linie a fisierului '''aemi.in''' conține un număr '''N''', ce reprezintă lungimea șirului dat. Linia a doua, conține, separate prin câte u...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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 celei mai mici valori 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 aemi.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 e 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 intervalului. Dacă T = 2 operația este de actualizare cu semnificația: elementul de pe poziția A primește valoarea B.

Date de ieșire[edit | edit source]

Fișierul aemi.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 ⩽ 100.000
  • 1 ⩽ M ⩽ 100.000
  • 1 ⩽ A ⩽ B ⩽ N
  • elementele șirului dat sunt indexate de la 1
  • elementele șirului dat sunt de tip int, pozitive

Exemplul 1[edit | edit source]

aemiin.txt
5
1 6 4 3 9
3
1 2 4
2 2 2
1 2 4 
aemiin.txt
3
2

Exemplul 2[edit | edit source]

aemiin.txt
5
1 6 4 3 9
0
1 2 4
2 2 2
1 2 4
aemiin.txt
Datele de intrare nu corespund restrictiilor impuse

neaparat tre ssa pui si un ex 2 care sa arate cand codul nu funtioneaza

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def verifica_restrictii(n, m, a):

   if n < 1 or n > 100000 or m < 1 or m > 100000:
       return False
   for numar in a:
       if numar < 1:
           return False
   return True


def actualizeaza(a, i, val):

   a[i - 1] = val


def interogheaza(a, i, j):

   return min(a[i - 1:j])


def rezolva_problema():

   with open('aemiin.txt', 'r') as fisier_intrare:
       n = int(fisier_intrare.readline())
       a = list(map(int, fisier_intrare.readline().split()))
       m = int(fisier_intrare.readline())
       operatii = [list(map(int, fisier_intrare.readline().split())) for _ in range(m)]
   if verifica_restrictii(n, m, a):
       print("Datele de intrare corespund restrictiilor impuse")
       with open('aemiout.txt', 'w') as fisier_iesire:
           for operatie in operatii:
               if operatie[0] == 1:
                   fisier_iesire.write(str(interogheaza(a, operatie[1], operatie[2])) + '\n')
               else:
                   actualizeaza(a, operatie[1], operatie[2])
   else:
       print("Datele de intrare nu corespund restrictiilor impuse")


rezolva_problema() </syntaxhighlight>