ACM_数据结构
yiqzq
人生如此复杂,机会多得像稠密图,我们没理由认输。尽管我们走不了最短路,但图仍是连通图,TLE之前,没有一个节点叫失败。
展开
-
红黑树插入操作的初步理解
红黑树插入操作的初步理解文章目录红黑树插入操作的初步理解红黑树的特征红黑树的插入节点总是红色的红黑树的修正变色左旋右旋插入操作插入操作的代码实现红黑树和AVL树的对比参考链接红黑树的特征每个节点不是红色就是黑色的根节点总是黑色的如果节点是红色的,则它的子节点必须是黑色的从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)红黑树的插入节点总是红色的...原创 2020-03-07 14:31:28 · 880 阅读 · 0 评论 -
SPOJ - COT Count on a tree(主席树+LCA)
原题地址:https://vjudge.net/problem/SPOJ-COT题意:求一棵树上两个点u,vu,vu,v之间点权第kkk小是多少。思路:我们知道主席树是利用前缀和思想求区间第kkk大的,对于树上的两个点,我们可以参考用lcalcalca求两点之间距离的写法。就是从根节点开始建主席树,然后对于求u,vu,vu,v两个点,就利用[根节点,uuu节点]+[根节点,v节点]-[根节点,...原创 2019-04-23 12:24:06 · 125 阅读 · 0 评论 -
单调栈和单调队列小总结
单调队列:解决一个序列中,每一个长度为k的窗口中的最值(区间最大值:单调递减队列)单调栈:解决一个序列中,每一个数字左边或者右边第一个比它大或小的元素....原创 2019-05-06 20:56:38 · 258 阅读 · 0 评论 -
Gym - 101102 D - Rectangles(单调栈+dp)
原题地址:http://codeforces.com/gym/101102/problem/D题意:给一个矩阵,求有多少不同的子矩阵.思路:定义dp[i][j]dp[i][j]dp[i][j]表示以第i行,第j列这个元素结尾的子矩阵数量.那么dp[i][j]=dp[i][k]+(j−k)∗h[i][j]dp[i][j]=dp[i][k]+(j-k)*h[i][j]dp[i][j]=dp[i]...原创 2019-05-07 10:41:45 · 155 阅读 · 0 评论 -
Gym - 101102 D - Rectangles(单调栈+dp)
原题地址:http://codeforces.com/gym/101102/problem/D题意:给一个矩阵,求有多少不同的子矩阵.思路:定义dp[i][j]dp[i][j]dp[i][j]表示以第i行,第j列这个元素结尾的子矩阵数量.那么dp[i][j]=dp[i][k]+(j−k)∗h[i][j]dp[i][j]=dp[i][k]+(j-k)*h[i][j]dp[i][j]=dp[i]...原创 2019-05-07 13:40:51 · 114 阅读 · 0 评论 -
CF740D Alyona and a tree(树上差分+二分)
原题地址:https://codeforces.com/contest/740/problem/D题意:给一棵树,vvv节点被uuu节点控制当且仅当vvv时uuu子树中的点,并且a[v]>=dis(u,v)a[v]>=dis(u,v)a[v]>=dis(u,v),其中a[v]a[v]a[v]是vvv节点的点权,dis(u,v)dis(u,v)dis(u,v)是u...原创 2019-05-22 12:40:26 · 145 阅读 · 0 评论 -
CF734E Anton and Tree(树的直径+dfs缩点)
原题地址:https://codeforces.com/problemset/problem/734/E题意:一棵树,每个节点都有一个颜色(0/1),每次操作可以将一个颜色的联通块变成另外一种颜色,问最小经过几次使得树的颜色统一.思路:对于一个联通块,我们选择其中任何一个节点进行染色操作的效果是等同的.因此,我们可以先进行缩点,缩成一个黑白相间的一棵树.然后我们考虑怎么染色所用次数最少.如果...原创 2019-05-24 08:38:23 · 166 阅读 · 0 评论 -
CF 915E. Physical Education Lessons(动态开点线段树||离散化+权值线段树)
原题地址:https://codeforces.com/contest/915/problem/E题意:给出一个长为nnn的初始值全为111的区间,每次进行区间赋值,并且询问[1,n][1,n][1,n]的区间和。方案一:由于区间最大时1e91e91e9,所以普通的线段树不可行,但因为虽然区间很长,但是并不是所有的节点都要使用,因此可以使用动态开点线段树来维护区间和。具体操作就是对于每一个节...原创 2019-08-09 15:46:56 · 314 阅读 · 0 评论 -
CodeForces 1076E Vasya and a Tree(树上差分+树状数组)
原题地址:https://codeforces.com/contest/1076/problem/E题意:给出一棵树,有mmm次操作,每次操作有一个v,d,x,v,d,x,v,d,x,表示将以vvv为根节点,距离vvv的长度小于等于ddd的所有节点权值加上xxx,最后求所有节点的权值。思路:如果是对节点v的子树进行修改,那么问题可以用dfs序转化为序列上的问题,但是这题是对距离为d的进行修改,...原创 2019-09-03 14:23:31 · 253 阅读 · 0 评论 -
CodeForces 813E Army Creation(主席树)
原题地址:https://codeforces.com/problemset/problem/813/E题意:给定NNN个数,以及QQQ个询问,每个询问给出LLL和RRR,现在问在这个区间选最多的数,使得每个数出现次数不能大于KKK,强制在线。思路:定义pospospos数组,pos[i]=jpos[i] = jpos[i]=j 表示从iii位置开始(不包括),第kkk个值为a[i]a[i]a...原创 2019-09-17 14:56:50 · 257 阅读 · 0 评论 -
POJ 2481 Cows(树状数组求区间真子集数量)
原题地址:http://poj.org/problem?id=2481题意:给出n个区间,求每一个区间可以包含的区间数量。(两个完全重合的区间不算)思路:树状数组的题,可以考虑通过sort排序的方法对一维排序,然后对另一维变量进行逐个求解答案并插入。对于这个题,我们对y进行降序处理,如果y相等,就对x轴进行升序处理。这么做的好处就在于,我们对于当前求解的区间,它能够包含的区间一定是在之前就已...原创 2019-03-07 19:41:10 · 206 阅读 · 0 评论 -
HDU 5493 Queue (二分+树状数组)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5493题意:有n个人排队,每个人都有一个独一无二的身高,告诉你每个人的身高和他前面或者后面的比他高的人的个数(到底是前是后是未知的)。 要求你还原原来的队列,并且字典序最小。思路:因为要求字典序最小, 我们可以先按照身高从小到大排序。一个人前面有k个人比他高或者后面有k个人比他高,我们可以将这个问题...原创 2019-03-09 20:11:22 · 110 阅读 · 0 评论 -
洛谷P3384 树链剖分
原题地址:https://www.luogu.org/problemnew/show/P3384树剖裸题,记录模板#include <bits/stdc++.h>#define eps 1e-8#define INF 0x3f3f3f3f#define PI acos(-1)#define lson l,mid,rt<<1#define rson mid+1,...原创 2018-12-26 14:26:08 · 203 阅读 · 0 评论 -
Codeforces 845 C Two TVs(贪心之优先队列维护)
原题地址:http://codeforces.com/contest/845/problem/C 写这题的时候发现和之前选拔赛的议题特别相近,读者可以自行参考这题https://blog.csdn.net/yiqzq/article/details/79548719。 说下思路:首先肯定要对数据进行排序,因此这里我们选择对电视播放时间进行排序,至于结束时间,无所谓。然后选择用一个优先队列去进行...原创 2018-04-04 16:58:35 · 152 阅读 · 0 评论 -
关于优先队列的符号重载记忆
关于括号的记忆struct cmp1{ bool operator ()(int &a,int &b){ return a>b;//最小值优先 } }; struct cmp2{ bool operator ()(int &a,int &b){ return a<...原创 2018-04-01 17:12:47 · 422 阅读 · 0 评论 -
贪心之区间选点问题(优先队列维护)
地址:http://113.240.233.2:8081/JudgeOnline/problem.php?id=1125#include <bits/stdc++.h>using namespace std;const int mx=1e5+5;struct node{ int st,en; bool operator < (const node&am...原创 2018-03-13 23:39:48 · 315 阅读 · 2 评论 -
poj 2431 Expedition(优先队列+贪心)
原题地址:http://poj.org/problem?id=2431 题意:给定n个加油站,每个加油站有2个信息,一个是距离终点站的长度,一个是可加的油量,现在给出路程总长度和和初始油量,让你判断是否能将车开到终点站,若能输出最少加油次数,若不能,输出-1 Expedition Time Limit: 1000MSMemory Limit: 65536K Total Submissi...原创 2017-12-25 22:20:17 · 252 阅读 · 0 评论 -
Cleaning Shifts 题解
关于Cleaning Shifts的一些解题思路先贴题目 Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up an原创 2017-11-21 23:15:16 · 477 阅读 · 0 评论 -
2018hdu多校赛1004 Distinct Values(set维护)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=6301题意:给你一个长度n,然后给出m个要求,每个要求包含l,r两个参数,在[l,r][l,r][l,r]这个区间内的数互不相同,让你构造这样一个序列,使得字典序最小。思路:用set维护可以使用的数值,然后使用两个指针指示上一个区间包含的范围。然后就可以像莫队一样将指针移动。注意可能会有两个...原创 2018-07-23 18:57:34 · 414 阅读 · 3 评论 -
Splay-tree 模板
#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;algorithm&gt;#include &lt;cmath&gt;#include &lt;cstring&gt;#include &lt;string.h&gt;#include原创 2018-07-26 18:51:57 · 220 阅读 · 0 评论 -
DFS序的应用
1.对节点X到Y的最短路上所有点权都加一个数W, 查询某个点的权值解 : 这个操作等价于 a. 对X到根节点路径上所有点权加W b. 对Y到根节点路径上所有点权加W c. 对LCA(x, y)到根节点路径上所有点权值减W d. 对LCA(x,y)的父节点 parent(LCA(x, y))到根节点路径上所有权值减W 于是要进行四次这样从一个点到根节点的区间修改 将问题进一步简化,...转载 2018-09-10 20:08:50 · 313 阅读 · 0 评论 -
Codeforces Round #510 (Div. 2) D. Petya and Array (树状数组)
原题地址:http://codeforces.com/contest/1042/problem/D题意:求所有[l,r][ l , r ][l,r]区间和小于TTT的这样的区间数量。思路:从lll 到rrr的和小于TTT,即sum(r)−sum(l−1)&lt;Tsum(r)-sum(l-1)&lt;Tsum(r)−sum(l−1)<T,其中sumsumsum是aaa的前...原创 2018-10-02 16:36:37 · 172 阅读 · 0 评论 -
Educational Codeforces Round 51 (Rated for Div. 2) F. The Shortest Statement (最短路+LCA)
原题地址:http://codeforces.com/contest/1051/problem/F题意:给你nnn个点,mmm条边。m−n&lt;=20m-n&lt;=20m−n<=20。保证图连通问你任意两点的最短距离是多少。思路:从数据范围入手,由于边的数量比点的数量多的有限.那么我们就可以把原来的图看成是一棵树然后添加了若干条边.首先如果只是单纯的一棵树,那么任意...原创 2018-09-26 23:20:47 · 158 阅读 · 0 评论 -
树状数组小总结
下面是从大佬那看来的,容我先理解一下int lowbit(int x) //是x的二进制形式的最低非0位对应的幂{ return x&amp;amp;amp;amp;(-x); } void add(int i, int x) {//更新数组 while(i &amp;amp;amp;lt;= n) { bit[i] += x; i += i &amp;amp;amp;amp; (-原创 2018-04-20 21:52:13 · 185 阅读 · 0 评论