解题思路

利用队列记录初始加入的队列顺序
再利用map<string,int>记录每个人是否在队列里面,如果在的话就为1,不在为0

匹配每次要out的人,只要out说明就不在队列里,那么对应的map就赋值为0
如果是在队伍头头,答案数++
后面再将队列头头为0的pop()掉,使其产生还在队伍里面的头头

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,su=0;
        cin>>n;
        queue<string> st;
        map<string,int>mp;
        string op,na;
        while(n--)
        {
            cin>>op>>na;
            mp[na]++;
            if(op=="in"){st.push(na);}
            else 
            {
                mp[na]=0;
                if(st.front()==na)su++;
                while(st.size()&&!mp[st.front()])st.pop();  //注意前面要保证队列里有数才能pop(),不然会越界
            }
        }
        cout<<su<<endl;
    }
}