Undo

Time limit: 0.15s Memory limit: 16MB Input: undo.in Output: undo.out

XORin este nemulțumit de problemele primite în prima zi de concurs de la Olimpiada Națională de Informatică și decide astfel să se implice în comisie. În scurt timp devine specialistul comisiei în generarea de teste formate din șiruri de numere. Din când în când el trebuie să adauge sau să șteargă elemente din șir. Câteodată el decide să readauge dintre elemente șterse anterior. Fie șirul de numere a=(a1,a2,,aN)a=(a_1, a_2, …, a_N) și NN numărul de elemente din șir după fiecare operație.

Astfel el are de realizat următoarele operații pornind de la un șir vid:

  • Inserează la sfârșitul șirului o valoare xx;
  • Șterge ultimele xx elemente din șir;
  • Readaugă la sfârșitul șirului primele xx elemente șterse. Dacă, de exemplu, în operația anterioară de ștergere a unui număr yy de elemente, am șters elementele aNy+1,aNy+2,,aNa_{N-y+1}, a_{N-y+2},…, a_N, iar acum urmează o operație de readăugare a xx elemente, vor fi adăugate în ordine elementele aNy+1,aNy+2,,aNy+xa_{N-y+1}, a_{N-y+2}, …, a_{N-y+x} la sfârșitul șirului.

Din când în când XORin își pune următoarea întrebare: de câte ori există valoarea xx în șir?

Date de intrare

Pe prima linie a fișierului undo.in se va afla MM ce reprezintă numărul de operații.

Pe următoarele MM linii se vor afla operațiile codificate astfel:

  • 1 x - se inserează elementul xx la sfârșitul șirului
  • 2 y - se șterg ultimele yy elemente adăugate în șir
  • 3 z - se adaugă înapoi la sfârșitul șirului primele zz elemente șterse
  • 4 t - se afișează numărul de elemente cu valoarea tt din șir

Date de ieșire

Pe fiecare linie a fișierului undo.out se scriu răspunsurile la întrebările lui XORin, fiecare răspuns pe câte o linie.

Restricții și precizări

  • Toate numerele din fișierul de intrare sunt cuprinse între 11 și 200 000200 \ 000;
  • Pentru 20%20\% din teste se garantează M1 000M ≤ 1 \ 000, pentru alte 40%40\% din teste, se garantează că numerele inserate vor fi distincte;
  • Între o operaţie de readăugare si operatia anterioară de stergere nu vor exista operatii de inserare.
  • Numărul de elemente readăugate nu va fi mai mare decât numărul de elemente șterse la ultima operație.
  • Între două operații de readăugare va exista cel puțin o operație de ștergere.

Exemplu

undo.in

16
1 1
1 2
1 3
1 4
4 4
2 2
4 3
3 1
4 4
4 3
1 7
1 7
1 7
4 7
2 2
4 7

undo.out

1
0
0
1
3
1

Explicație

Inițial șirul este vid.

După primele 44 operații de inserare șirul este 1, 2, 3, 4.

Operația 4 4 va afișa 11.

Operația 2 2 va șterge ultimele două elemente șirul devenind 1, 2.

Din cauză că elementul 33 a fost șters, a șaptea operație va afișa 00.

Operația 3 1 va readăuga la sfârșitul șirului elementul 33.

În urma acestei operații șirul devine 1, 2, 3.

Operația 4 4 va afișa 00, iar operația 4 3 va afișa 11.
ș.a.m.d.

Log in or sign up to be able to send submissions!