STL之deque和set

按照惯例上网址:https://blog.csdn.net/u011630575/article/details/79923132

介绍:
deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列

deque<int>  d;//一般定义
d.push_back(x)//在队列最后添加x;
d.push_front(x)//在队列最前面添加x;
deque<int>::iterator it;
it=d.end();
d.pop_back();//弹出最后一个

和set结合的一道题用
来源:cf#590(Div3)
题目地址:https://codeforces.com/contest/1234/my
题意:给你个长度为 n 的数组和一个队列 , 队列最多可以同时存在 k 个数。遍历这个数组 , 如果当前数组对应的数在队列中则不做改动 , 如果不在则将它插入队首 , 并且将队尾弹出。遍历完后按照队列顺序输出

#include<bits/stdc++.h>
#define ll long long 
#define ios std::ios::sync_with_stdio(false) , std::cin.tie(0) , std::cout.tie(0)
using namespace std;
const int N = 2e5+10;
int n , k;
ll a[N];
set<ll>qq;
deque<ll>txc;
deque<ll>::iterator it;
int main()
{
    ios;
    cin >> n >> k;
    cin >> a[1];
    qq.insert(a[1]);
    txc.push_front(a[1]);
    for(int i = 2 ; i <= n ; i++)
    {
        cin >> a[i];
        if(qq.count(a[i])) continue;
        if(qq.count(a[i]) == 0 && qq.size() < k)
        {
            qq.insert(a[i]);
            txc.push_front(a[i]);
        }
        else if(qq.count(a[i]) == 0 && qq.size() == k)
        {
            it = txc.end(); it--;
            qq.erase(*it);
            txc.pop_back();
            txc.push_front(a[i]);
            qq.insert(a[i]);
        }
    }
    cout << txc.size() << endl;
    for(it = txc.begin() ; it != txc.end(); it ++)
    {
        cout << *it << " ";
    }
    return 0;
}

这里我提一点关于set的用法吧,多练多见多会。
比如
a.count(x)的意思就是在a的set队列里找有没有x这个元素,有则输出1,没有则0.大概就是起一个查找的功能吧

发布了71 篇原创文章 · 获赞 5 · 访问量 3418

猜你喜欢

转载自blog.csdn.net/Rainfoo/article/details/102178166