Se consideră C
o coadă de numere naturale, iniţial vidă. Se definesc 2 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
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
.
#include <bits/stdc++.h> using namespace std; ifstream cin("coada1.in"); ofstream cout("coada1.out"); int f[1001]; queue<int>Q; int main() { int c , x , sterse=0 , poz = 0; string s; cin >> c; for(int i = 1 ; i <= c ; i++) { cin >> s; cin >> x; if(s == "push") { if(f[x] != 0) { while(Q.front() != x) { f[Q.front()] = 0; Q.pop(); sterse++; } Q.pop(); sterse++; } poz++; Q.push(x); f[x] = poz; } else { if(f[x] == 0) cout << -1 << '\n'; else cout << f[x] - sterse<< '\n'; } } }