<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3695_-_iziStack</id>
	<title>3695 - iziStack - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3695_-_iziStack"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3695_-_iziStack&amp;action=history"/>
	<updated>2026-05-01T13:16:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3695_-_iziStack&amp;diff=9999&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Enunt == Se dă o stivă vidă. Elementele stivei sunt numerotate incepand cu 1 de la bază înspre vârf. Avem de procesat T comenzi de tipurile:  * 0 x – elementul x se va adăuga în vârful stivei * 1 x y add – tuturor elementelor din intervalul x y le va fi adăugată valoarea add * 2 – eliminarea elementului din vârf == Cerinţa == Afisați dupa fiecare operație elementul din vârful stivei. Se garantează: 1. că nu se va efectua operația de tip 2 dacă nu...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3695_-_iziStack&amp;diff=9999&amp;oldid=prev"/>
		<updated>2024-06-03T16:29:11Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Se dă o stivă vidă. Elementele stivei sunt numerotate incepand cu 1 de la bază înspre vârf. Avem de procesat T comenzi de tipurile:  * 0 x – elementul x se va adăuga în vârful stivei * 1 x y add – tuturor elementelor din intervalul x y le va fi adăugată valoarea add * 2 – eliminarea elementului din vârf == Cerinţa == Afisați dupa fiecare operație elementul din vârful stivei. Se garantează: 1. că nu se va efectua operația de tip 2 dacă nu...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Se dă o stivă vidă. Elementele stivei sunt numerotate incepand cu 1 de la bază înspre vârf. Avem de procesat T comenzi de tipurile:&lt;br /&gt;
&lt;br /&gt;
* 0 x – elementul x se va adăuga în vârful stivei&lt;br /&gt;
* 1 x y add – tuturor elementelor din intervalul x y le va fi adăugată valoarea add&lt;br /&gt;
* 2 – eliminarea elementului din vârf&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Afisați dupa fiecare operație elementul din vârful stivei.&lt;br /&gt;
Se garantează:&lt;br /&gt;
1. că nu se va efectua operația de tip 2 dacă nu există cel puțin două elemente în stivă;&lt;br /&gt;
2. că prima operatie va fi de tipul 0&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare izi.in conține pe prima linie un număr natural T, iar pe următoarele T linii operațiile efectuate asupra stivei.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire izi.out va conține T linii, reprezentând elementele din vârful stivei dupa fiecare operație.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ T ≤ 1.000.000&lt;br /&gt;
* -1000 ≤ add ≤ 1000&lt;br /&gt;
* Pentru operațiile de tip 1, -1000 ≤ x ≤ 1000, iar pentru operatiile de tip 2 numărul elementelor aflate în stivă este mai mare ca y&lt;br /&gt;
* Pentru 36 puncte: 1 ≤ T ≤ 1000&lt;br /&gt;
* Pentru alte 33 puncte: Toate operatiile de tip 2 se vor afla la finalul fișierului de intrare&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; izi.in&lt;br /&gt;
 7&lt;br /&gt;
 0 1&lt;br /&gt;
 1 1 1 2&lt;br /&gt;
 0 2&lt;br /&gt;
 1 1 2 3&lt;br /&gt;
 2&lt;br /&gt;
 0 4&lt;br /&gt;
 2&lt;br /&gt;
; izi.out&lt;br /&gt;
 1&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 4&lt;br /&gt;
 6&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
class Stack:&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.stack = []&lt;br /&gt;
&lt;br /&gt;
    def push(self, x):&lt;br /&gt;
        self.stack.append(x)&lt;br /&gt;
&lt;br /&gt;
    def pop(self):&lt;br /&gt;
        if self.is_empty():&lt;br /&gt;
            return None&lt;br /&gt;
        return self.stack.pop()&lt;br /&gt;
&lt;br /&gt;
    def top(self):&lt;br /&gt;
        if self.is_empty():&lt;br /&gt;
            return None&lt;br /&gt;
        return self.stack[-1]&lt;br /&gt;
&lt;br /&gt;
    def is_empty(self):&lt;br /&gt;
        return len(self.stack) == 0&lt;br /&gt;
&lt;br /&gt;
def process_operations(T, operations):&lt;br /&gt;
    stack = Stack()&lt;br /&gt;
    for op in operations:&lt;br /&gt;
        if op[0] == 0:&lt;br /&gt;
            stack.push(op[1])&lt;br /&gt;
        elif op[0] == 1:&lt;br /&gt;
            x, y, add = op[1], op[2], op[3]&lt;br /&gt;
            for i in range(x - 1, y):&lt;br /&gt;
                stack.stack[i] += add&lt;br /&gt;
        elif op[0] == 2:&lt;br /&gt;
            stack.pop()&lt;br /&gt;
        if not stack.is_empty():&lt;br /&gt;
            print(stack.top())&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    T = int(input())&lt;br /&gt;
    operations = []&lt;br /&gt;
    for _ in range(T):&lt;br /&gt;
        operation = list(map(int, input().split()))&lt;br /&gt;
        operations.append(operation)&lt;br /&gt;
    process_operations(T, operations)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AjM</name></author>
	</entry>
</feed>