EOJ_1015_查字典

#include <bits/stdc++.h>
#define MAX 20004
using namespace std;
//入队列和出队是队列
//查询操作可以加一个map

int q[MAX]={0};
int head=0;
int tail=0;
map<int, bool> table;

int main()
{
    int m,n;
    cin>>m>>n;
    int res=0;
    for(int i=0;i<n;i++){
        int tmp;
        cin>>tmp;
        if(!table.count(tmp)){
            //cout<<"tmp*"<<tmp<<endl;
            if((tail-head)>=m){
                table.erase(q[head]);
                //cout<<q[head]<<endl;
                //cout<<table[q[head]]<<endl;
                //有这一行则res=4 而不是res=5,以为table[q[head]]会在map中创建一个新key
                head++;
            }
            table.insert(make_pair(tmp,true));
            q[tail]=tmp;
            tail++;
            res++;
            //cout<<tmp<<endl;
        }
    }
    cout<<res<<endl;

    return 0;
}```

上一篇:EOJ_1064_树的层号表示法


下一篇:EOJ Monthly 2021.10