目录
1.栈
栈是一个先进后出的结构
例题:火车轨道
注意:至多只进一次栈
详解在这里:http://t.csdnimg.cn/ZSd83
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
int a[N];
int main()
{
stack<int> stk;
int n;
cin >> n;
int sta = 1;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++)
{
while(sta <= n &&(stk.empty() || stk.top() != i))
stk.push(a[sta++]);
if(stk.top() == i)
stk.pop();
}
if(stk.empty())
cout << "Yes";
else
cout << "No";
return 0;
}
2.优先队列
内部不能访问 ,默认是大根堆永远能保证最顶端的那个最大,priority_queue
可以pop弹出堆顶,top访问堆顶,size访问元素个数,push推入
例题:小e的菜篮子
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
priority_queue<int> pque;
ll q,x;
cin >> q;
ll ans = 0;
while(q--)
{
int flag;
cin >> flag;
if(flag == 1)
{
cin >> x;
pque.push(x);
ans += x;
}
else if(flag == 2 && pque.size())
{
ans -= pque.top();
pque.pop();
}
}
cout << ans;
return 0;
}
3.map
map和数组类似,如果说数组是值与值之间的对应,那么map就是key和value之间的对应,key和value的类型都是我们自己可以控制的,可以是字符串,也可以是int或者double类型的
map默认键是从小到大的
例题:气球数量
vector是保证字符串的顺序正确
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
int a[N];
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
map<string,int> mp;
vector<string> v;
while(n--)
{
string s;
cin >> s;
mp[s]++;
if(mp[s] == 1)
v.push_back(s);
}
for(auto &ele : v)
cout << ele << ' ' << mp[ele] << '\n';
}
return 0;
}
4.set
默认从小到大,且会自动去重,可用insert进行插入值
例题:【模板】排序(1)
用于排序去重
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
int a[N];
int main()
{
int n;
cin >> n;
set<ll> st;
while(n--)
{
ll x;
cin >> x;
st.insert(x);
}
for(auto &ele : st)
cout << ele << ' ';
return 0;
}
5.bitset
是一个有很多位的二进制数,支持位运算
右边是低位,左边是高位
可以用count返回1的个数,reset重新全部变为0,可以就把它当成一个bool数组用
例题:数的种类
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 5e5 + 10;
int main()
{
int n;
cin >> n;
bitset<N> bs;
bs[0] = 1;
for(int i = 1; i <= n; i++)
{
int x;
cin >> x;
bs |= (bs << x);
}
cout << bs.count() << '\n';
return 0;
}