363
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';
}
}
}
Comentarii