Minimumli stek
Minimumli stek
Vazifa
Uchta amalni qo‘llab-quvvatlaydigan stekni amalga oshirish kerak:
push(x)— elementni oxiriga qo‘shishpop()— elementni oxiridan o‘chirishget_min()— minimal elementni olish
Barcha amallar O(1) da ishlashi kerak.
G‘oya
Oddiy stek minimumni tez topa olmaydi — buning uchun har safar barcha elementlar bo‘ylab yurishga to‘g‘ri kelardi.
Yechim:
Ikki stek saqlaymiz:
st— oddiy stekmn— minimumlar steki
mn stekiga har bir qadamda joriy minimumni qo‘yib boramiz.
Bu qanday ishlaydi
push(x) da:
xni asosiy stekka qo‘shamiz- minimumlar stekiga qo‘shamiz:
- stek bo‘sh bo‘lsa
x - aks holda
min(x, joriy minimum)
- stek bo‘sh bo‘lsa
pop() da:
- ikkala stekdan ham elementni o‘chiramiz
get_min() da:
- minimumlar stekining tepasini qaytaramiz