总结一下接触过的常用数据结构(FIFO队列和栈就不说了,SPLAY、Treap、红黑树什么的看情况再写)
先说下STL,STL迭代器分为五种,input,output,正向,双向,随机存取。支持后面特性的迭代器一定支持前面的。
STL中,vector和deque都支持随机访问;set,map和list都只支持到双向迭代器,不支持随机存取,也就是说不能对这三个的迭代器进行+-运算(但是可以进行++,--运算,因为支持双向迭代);stack,queue,priority_queue不支持迭代器,它们都是容器适配器。
1、单调队列
队列内的元素是单调排列的,和普通队列的区别在于队列尾部可以弹出元素。常用于优化DP什么的,一般可以把复杂度相对高的东西优化不少。
2、树状数组
问题是:给定一个数组,支持两种操作:A.修改某个元素的值,B.查询某个区间[L,R]的所有元素的和
树状数组也叫Fenwick Tree,本质是用数的二进制进行快速计算,设置一个C数组,C ...