![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Mudrobot
这个作者很懒,什么都没留下…
展开
-
Spaly详解
P2234 [HNOI2002]营业额统计链接戳这里☞营业额统计上代码(附有注释): #include<bits/stdc++.h> using namespace std; struct sd { int value;//当前节点所储存的值 int son[2];//左右儿子 int...原创 2018-02-27 23:08:31 · 1815 阅读 · 0 评论 -
从逆序对发展
其实逆序对不仅仅是可以用1、离散化+权值线段树2、动态开点+权值线段树如果您还没有看到这两个解法,不要着急,下面是链接:从逆序对开始这道题已经被我淡忘一周了,可是他的灵魂我一直没有忘记,直到昨天,有一个同学提醒我这道题能不能用树状数组做,我一下子就惊醒了,我发现这个东西应该是一个非常好的点子,因为树状数组本来就要比线段树快并且空间比线段树小,最重要的是,这玩意儿还非常的好写,所以今...原创 2018-04-04 17:18:16 · 147 阅读 · 0 评论 -
主席树铺垫——总区间第k小
题目描述(口糊)先给定一个长度为n的数列,然后给m次操作,每次输入b,求第b小的数。样例输入57 4 10 9 23512345样例输出4791023数据范围及温馨提示1e9 大家一定要用线段树做这道题啊!建议大家在认真阅读一下逆序对的题解题解传送门于是这里我们只需要把query改一下其实就可以了。int q...原创 2018-03-28 16:55:41 · 134 阅读 · 0 评论 -
树状数组(基础)
首先,我们阐明一下为什么我们要学习树状数组,因为这个东西在某些方面来说要比线段树好一些,首先就是他自己比较好写,第二就是他在解决某些简单问题时,时间复杂度会比线段树更小一些。下面先来上一篇代码: 大家可以认真看一下 题目传送门(单点修改和区间查询)#include<iostream>#include<cstring>#define lowbit(x) x...原创 2018-03-21 16:29:45 · 139 阅读 · 0 评论 -
动态主席树
本题代码博主还没有认真研究过,但是可以大致脑补出动态主席树的操作。但是还是请你确保你在理解这篇代码之前已经理解了前面的静态主席树和主席树铺垫友情链接:主席树铺垫主席树然后我们来讲一下动态主席树的思路吧,其实重点只有一句话,但是在这里我还是给大家讲的详细一点。我们的静态主席树是只支持查询静态区间第k小,那么相信大家已经是非常熟悉他的思路了。但是动态主席树是支持进行在修改的,所以会...原创 2018-03-31 11:40:17 · 296 阅读 · 0 评论 -
静态主席树
这个东西对于我这种菜鸡来说还是有一点难以把他解释清楚,所以在一些关键的讲解步骤(我自己解释不清楚的地方),我就只好引用一下一些大佬的!(其实写完了以后发现这些东西都是我自己写的!!!嗯,有进步!!!)下面我就开始讲哈!相信大家看这篇讲解之前都应该看了我前面写的一篇博客,如果没有看大家可以先去看一下:讲解传送门(求整体区间第k大)好了我们默认大家应该已经懂得了如何求整体区间第k大了,...原创 2018-03-31 11:21:47 · 198 阅读 · 0 评论 -
从逆序对开始······
请对每一个你所学的知识保持一种尊敬的态度,千万不要说一个东西简单,是知识总会有他独特的价值,这也是为什么我要坚持写博客的一个原因!!!题目传送门不得不说今天晚上听了一下大佬讲解的逆序对,确实感觉这个东西非常的神奇,因为我发现这个东西不仅仅是一个归并排序那么简单的东西,实际上背后还大有学问,虽然本人并没有学会这道题的基本解决方式,但是跟着大佬混总还是会学到一些东西的,那么今天我就来为大家介绍...原创 2018-03-24 13:32:03 · 149 阅读 · 0 评论 -
Lower_bound和upper_bound大致使用事项
upper_bound 和lower_bound是二分查找,所以效率略高,但笔者在使用的时候发现偶尔会有一些问题,所以写了这篇文章,总结了一发。首先,最形象的一句话: upper_bound(i) 返回的是键值为i的元素可以插入的最后一个位置(上界) lowe_bound(i) 返回的是键值为i的元素可以插入的位置的第一个位置(下界)。怎么理解呢,举例: 在升序的set里面 ...转载 2018-03-23 19:30:12 · 488 阅读 · 0 评论 -
链表(LInked LIst)
今天上午凭借昨天晚上自己学习的指针,今天学习了链表,发现还是一个非常有用的数据结构,从此我知道了学习指针的重要性。很多人给我说,指针这个东西其实没有什么太大的作用,认为链表其实也可以不用指针写,虽然代码篇幅要大一些,但是要好理解一些,但是其实用指针写利远远大于弊,这里列出一些我认为是优点的东西。指针变量速度上有一些优势。指针数组可以动态的申请和释放空间,不需要像普通数组一样直接必须申请...原创 2018-03-10 11:50:12 · 217 阅读 · 0 评论 -
线段树1对于Pushdown的理解
线段树1对于Pushdown的理解线段树1是一个区间修改和区间求值的题,他相当于以前的线段树——区间求值和单点修改和区间修改和单点求值,产生了本质上的一些区别,最主要的就在于Pushdown上的区别,现在我们就来区分一下。1、线段树练习——单点修改和区间求值这个主要考察的就是线段树最主要的三个步骤 建树(Buildtree) 修改(modify) 查询(query)本题难度不大...原创 2018-02-27 23:44:59 · 3555 阅读 · 0 评论 -
初识单调栈
P2866 [USACO06NOV]糟糕的一天Bad Hair Day首先让我们了解一下,对于本题单调栈的一个操作思路。没看题的戳这里→题目。先定义一个栈,然后我们遵循一个原则,我们先从头开始把奶牛的身高压入栈,(一定要记住是从前往后看)第一头直接压,不管,前面的看一下后面有没有比他高的,如果暂时没有就top- -(top是记录他*被*看的次数);直到有的时候,那么就把他top++...原创 2018-02-27 23:43:45 · 115 阅读 · 0 评论 -
初识单调队列
P1886 滑动窗口这道题是一道单调队列的基本练习,因为时间缘故,我就不再这里多说了,看到有一篇很好的题解在这里*转载*一下,讲得非常的详细,相信大家认真看一下,也是可以看懂的。单调队列有两个性质队列中的元素其对应在原来的列表中的顺序必须是单调递增的。队列中元素的大小必须是单调递*(增/减/甚至是自定义也可以)单调队列与普通队列不一样的地方就在于单调队列既可以从队首出队...原创 2018-02-27 23:43:06 · 128 阅读 · 0 评论 -
线段树Coding Caution
线段树注意事项1、是int的函数,递归调用得时候一定要记得写return。2、线段树一定要记住Buildtree。3、线段树左右节点不要打反了。4、查询(query)一定记得要用long long。5、结构体中sum一类的变量要开成long long。6、不要把return 0写到for循环里面。7、注意儿子的下标要一致。8、有乘法运算的初始化pass=1。后续...原创 2018-02-27 23:33:20 · 106 阅读 · 0 评论 -
线段树2对于Pushdown的理解
关于“线段树2”~3373最近才把这玩意儿搞出来,代码和解说如下: #include<cstdio> #include<cstring> using namespace std; const int N=100005; struct sd{ int son[2],l,r; long long ...原创 2018-02-27 23:32:16 · 1098 阅读 · 1 评论 -
Splay源代码(营业额统计 2234)
#pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; int n,L=1,R=0,ans,root=1,cnt=1,minn,maxx; struct tree{ int son[2];int num;...原创 2018-02-27 23:27:30 · 157 阅读 · 0 评论 -
【解题报告】小白逛公园 vijos
题目传送门这道题是一道线段树的一个求一个连续最大字段和是一个区间线段树一个很妙妙的操作,这里后面我们后面就会提到,因为今天博主没有时间了所以先粘一篇代码供大家参考,其实代码理解还是非常的简单的。代码如下:#include<bits/stdc++.h>using namespace std;struct data{ int rmax,lmax,maxtot,s...原创 2018-04-21 16:52:00 · 263 阅读 · 0 评论