# PBinfo #1598 – Coada1 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Se consideră C o coadă de numere naturale, iniţial vidă. Se definesc două tipuri de operaţii.

Operaţia 1 : push X, adaugă elementul X în coadă. Dacă X există deja în coadă, se scot toate elementele din coadă, pana la întâlnirea lui, inclusiv X.
Exemplu: 
	C: 2 4 5 1 6
	Push 5
	C: 1 6 5 ( s-au scos 2, 4, 5).

Operaţia 2: query X, cere afişarea poziţiei elementului X în coada C. Dacă elementul nu există în coadă, se afişează -1.
Exemplu:
	C: 2 5 1 3 7
	Query 1
	Răspuns: 3

Cerința
Dându-se M, reprezentând numărul de operaţii şi cele M operaţii, să se răspundă la operaţiile de tip query.

Date de intrare
Fișierul de intrare coada1.in conține:

Pe prima linie numărul natural M;
Pe următoarele M linii, câte un string şi câte un număr natural, de forma tip_operaţie x, reprezentând tipul operaţiei şi numărul X.


Date de ieșire
Fișierul de ieșire coada1.out va conține:

Răspunsurile pentru operaţiile de tip query, câte unul pe linie.


Restricții și precizări

1 ≤ M ≤ 50.000
1 ≤ X ≤ 1.000

Exemplu:
coada1.in

10
push 3
push 6
push 8
push 2
query 6
push 6
query 4
push 6
push 7
query 6
coada1.out

2
-1
1
Explicație
Înaintea primei întrebări, coada arată asa: 3 6 8 2, deci 6 apare pe poziţia 2.
Înaintea celei de-a doua întrebări, coada arată asa: 8 2 6, deci 4 nu apare.
Înaintea ultimei întrebări, coada arată asa: 6 7, deci 6 apare pe poziţia 1.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream in("coada1.in");
ofstream out("coada1.out");
#define cin in
#define cout out
int n, freq[1005];
int contor = 0, val = 0;
queue<int> coada;
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        string com;
        int nr;
        cin >> com >> nr;
        if (com == "push") {
            if (freq[nr] != 0) {
                while (coada.front() != nr) {
                    freq[coada.front()] = 0;
                    coada.pop();
                    val++;
                } coada.pop();
                val++;
            } contor++;
            coada.push(nr);
            freq[nr] = contor;
        } else if (com == "query") {
            if (freq[nr] == 0) cout << -1 << "\n";
            else cout << freq[nr] - val << "\n";
        } 
    } return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1598)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1598/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1598/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
