笔记
Christine_xb
lnsyoier
展开
-
区间dp学习笔记
区间dp相关整理定义:区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合 ,求合并后的最优值。设F[i,j](1<=i<=j<=n)表示区间[i,j]内的数字相加的最小代价最小区间F[i,i]=0(一个数字无法合并,所以代价为0)。每次用变量...原创 2020-02-22 11:06:59 · 103 阅读 · 0 评论 -
树状数组学习笔记
引入如何把一个正整数x分成几个区间?while(x>0){ printf("[%d,%d]\n",x-(x&-x)+1,x); x-=x&-x;}这里来了解一下lowbit()函数。int lowbit(int x){ return x&-x;}返回值为对参数x转为二进制后,将最后一个1进位的结果。例如,l...原创 2020-02-18 13:21:03 · 69 阅读 · 0 评论 -
p1908 求逆序对(树状数组)
当ai < 10^5的时候树状数组向上修改,向下查询(即传统方法)。逆向枚举每一个数,先查询已经插入树状数组中比他小的元素的个数,累加ans;然后再把这个数加入到树状数组。for(i=n;i>=1;i–){ans+=getsum(a[i]-1);fix(a[i]);}...原创 2020-02-29 10:29:49 · 339 阅读 · 1 评论 -
栈学习笔记
栈定义:它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈应用:1、字符串表达式计算2、括号匹配单调栈定义:栈内元素单调递增或者单调递减的...原创 2020-02-14 14:13:48 · 127 阅读 · 0 评论 -
双向bfs学习笔记
双向bfs相关整理双向bfs主要是引入起点和终点一起遍历,并给数组多加一维。因为双向的最短路一定是整体的最短路,即搜索到一个点另一位也已经搜索到,直接输出即可。双向bfs的好处:考虑广度优先遍历,越到后面的层数,常数越大,如果采用双向bfs这一遍历方式可以使常数大大减小,从而起到降低时间复杂度的作用。双向和单向的区别在于,可以从终点和起点同时出发,记录每个点是被从起点开始的访问了(开一个vi...原创 2020-02-07 12:13:43 · 366 阅读 · 0 评论 -
map映射学习笔记
map(映射)用法一览map是一种c++的STL库里带有的特殊数据结构,也可用#include<map>头文件。那它的作用是什么呢如果它并没有什么卵用我们也就不会学它了其实map的作用就是——具有查找功能,可查找(或删除)指定元素。那么直接上函数,其实我们可以看到这些STL里带的数据结构的函数的用法和名称都是有一点像的, 要不然我这个蒟蒻也记不住(虽然现在也仍然记不住。m.c...原创 2020-02-07 11:21:13 · 162 阅读 · 0 评论 -
位运算学习笔记
位运算相关整理1.补码补码是为了表示一个负数的二进制形式。其转化方式是,先将负数当成正数,转化成二进制的形式,再将二进制正数的各个位上取反,再加上-。例如-5先求出5的二进制数 : 0000 0000 0101然后将各个位上0变1,1变0 : 1111 1111 1010最后再加1 : 1111 1111 1011这里5二进制下是101表示时前面全是0,这里省略就只写了几个意思一下...原创 2020-02-05 10:17:56 · 94 阅读 · 0 评论 -
二叉堆相关整理(大根堆小根堆)
二叉堆的概念二叉堆是一种支持插入、删除、查询最值的数组结构。它其实是一棵满足堆性质的完全二叉树,树上的每一个节点都带有一个权值。二叉堆的存储层次序列存储方式,直接用一个数组来保存二叉堆。逐层从左到右为树中的节点依次编号,把此编号作为节点在数组中存储的位置(下标)。在这种存储方式中,父节点编号等于子节点等于子节点编号除以2,左子节点编号等于父节点编号乘2,右子节点编号等于父节点编号乘2加1。...原创 2020-02-04 11:03:39 · 507 阅读 · 0 评论 -
multiset的用法
multiset集合头文件#include<>里放set 当然STL库也可以multiset与set的区别就是set会自动去重,multiset不会去重。所有这些STL库里能自动排序的数据结构时间复杂度都是O(logn)只是我会的这些 而sort的时间复杂度是O(nlogn),所以有时候用数组模拟每次sort排会超时。直接上代码#include<set>#inc...原创 2020-02-03 17:52:05 · 640 阅读 · 0 评论 -
运算符重载
论运算符重载的方法和必要性其实爱用不用但还蛮好用举个结构体里的例子 当然我不会说这是我最近刚写复制过来的struct node{ int val,id; bool operator <(node it) const{return val<it.val;}};加减乘除都是一样的其实就是个个人没用的学习笔记...原创 2020-02-03 16:22:03 · 65 阅读 · 0 评论 -
双向链表使用
双向链表如何优化时间复杂度当然就是 插入删除快 啦设想不用链表,在一个数组中插入删除数据,需要将每个数据挪一位,用循环会超时。用结构体模拟,可以不用指针,在结构体里定义l,r两个变量保存数组下标即可。struct node{ int val,l,r;}p[200005];void del(int x){ p[x].l=p[p[x].l].l; p[x].r=p...原创 2020-02-03 16:17:14 · 168 阅读 · 0 评论 -
洛谷等oj上提交记录一览
compare error 编译错误 提示英文编译信息WA 即wrong answer错误答案RE 即runtime error 这个的问题比较复杂1、数组开得太小了,导致访问到了不该访问的内存区域2、发生除零错误3、大数组定义在函数内,导致程栈区耗尽4、指针用错了,导致访问到不该访问的内存区域5、还有可能是程序抛出了未接收的异常但是一般都是输入的那个数组开小了TLE 即tim...原创 2020-02-01 20:49:52 · 1640 阅读 · 0 评论 -
STL库里queue stack priority queue
论c++STL库里queue stack 和priority queue相似与区别queue是一边进一边出 所谓先进先出 后进后出stack是只有一边开口进出 先进后出 后进先出所以可以理解为 栈是上下的 像一个杯子队列是左右的 像一个管道所以返回栈顶函数为top( )返回队头队尾函数为...原创 2020-02-01 12:06:43 · 85 阅读 · 0 评论