按照惯例上网址: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.大概就是起一个查找的功能吧