Pagina informaticii

Teste de informatică pentru liceu, articole C#, C/C++, PHP

Aplicatii cu heap-uri

Aplicaţie cu heap-uri

Se consideră şirul iniţial de numere 1, 2, ..., n (n £ 10.000) memorat într-un vector H. Asupra acestui şir se efectuează operaţii de două tipuri:
- add: adăugarea unei valori întregi x la valoarea de la poziţia i (adică H[i] = H[i] + x)
- querry: care este valoarea minimă din vectorul H?

În fişierul querry.in pe prima linie se află două numere naturale n şi M (1 £ M £ 1.000.000), iar pe următoarele M linii se găseşte codificată câte o operaţie. Operaţia add se codifică prin tripletul 1 i x, iar operaţia querry prin numărul 2. Pentru fiecare operaţie querry trebuie să afişaţi în fişierul querry.out pe câte o linie care este valoarea minimă din vector.

Exemplu


querry.in

querry.out

Explicaţii

10 6
2
1  10  –9
2
1  5  20
1  3  11
2

10
9
25

Sunt 3 operaţii add şi 3 operaţii querry.
La primul querry vectorul este:   
1  2  3  4  5  6  7  8  9  10
La al doilea querry vectorul este:
1  2  3  4  5  6  7  8  9  1
La al treilea querry vectorul este:
1  2  14  4  25  6  7  8  9  1

 

Indicaţie: organizând vectorul ca un min-heap, fiecare operaţie add se va efectua în timp O(log n) (pentru reorganizarea min-heap-ului), iar operaţia de interogare se va efectua în O(1) (minimul se va găsi mereu în H[1]). Este necesar un al doilea vector în care se va memora poziţia fiecărei valori din heap.

Despre autor
Author

Dan Pracsiu deţinător www.dponline.ro
Profesor, Liceul Teoretic "Emil Racoviță" Vaslui
Membru în Comisia Naţională a Olimpiadelor de Informatică
Pasiuni: istoria, călătoriile, fotografia, muzica clasică

Scrie un comentariu
Nume:

Comentariu:

15 + 10 =