2090 - Actualizare Element, Minim Interval

De la Universitas MediaWiki

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 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

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

  • 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

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

Exemplul 2

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

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()