2090 - Actualizare Element, Minim Interval
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>