fbpx

Problema #1598 – Coada1 – Rezolvari PBInfo

de Mihai-Alexandru

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

S-ar putea sa iti placa