
数据结构
文章平均质量分 66
记录自己竞赛所学到的数据结构
ぺdepths°
日拱一卒,功不唐捐!
展开
-
「学习笔记」STL用法
文章目录STL集合1 栈(stack)1.1 成员函数1.2 单调栈应用2 队列(queue)2.1 普通队列2.2 双端队列3 迭代器和pair4 动态数组(vector)5 双向链表(list)6 集合(set)6.1 set和multiset6.2 unordered_set和unordered_multiset7 键值对集合(map)7.1 map和multimap7.2 unordered_map和unordered_multimapSTL集合1 栈(stack)1.1 成员函数#incl原创 2020-07-11 13:48:46 · 529 阅读 · 0 评论 -
Codeforces 596 Div. 2 Power Products //STL
传送站:https://codeforc.es/contest/1247/problem/D题意:给一组数,问有多少对数满足相乘后为一个数的k次幂,输出满足条件的数的对数,相乘的次序不可改变。思路:我们知道任意一个数都可以质因子分解为几个几个质数幂次相乘的形式,也就是:x=p1a1∗p2a2∗p3a3∗...∗pnanx=p_1^{a_1}*p_2^{a_2}*p_3^{a_3}*...*p...原创 2019-10-30 18:18:44 · 176 阅读 · 0 评论 -
Schedule(贪心/multiset的用法)
There are N schedules, the i-th schedule has start time si and end time ei (1 <= i <= N). There are some machines. Each two overlapping schedules cannot be performed in the same machine. For eac...原创 2019-08-01 22:00:01 · 437 阅读 · 0 评论 -
牛客挑战赛36-C 纸飞机 //dp优化
题面链接https://ac.nowcoder.com/acm/contest/3782/C题目大意对于原数组的每个数a[i]a[i]a[i],分别求出去除a[i]a[i]a[i]后,能覆盖另外n−1n-1n−1个数的最少递减子序列的个数。思路首先,去除a[i]a[i]a[i]后,需要用最少的递减子序列覆盖另外n−1n-1n−1个数,也就是求:去除a[i]a[i]a[i]后的最小链覆盖。...原创 2020-01-19 17:26:51 · 327 阅读 · 0 评论 -
「学习笔记」树状数组
伟大原创 2019-08-15 22:39:26 · 623 阅读 · 1 评论 -
HDU-4991 Ordered Subsequence //dp+BIT
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4991题意给一个序列,让求出该序列有多少个长度为m的严格递增子序列,结果对123456789取模。解析设元素组为a[i]a[i]a[i],定义dp[i][j]dp[i][j]dp[i][j]为以a[i]a[i]a[i]结尾长度为m的严格递增子序列的个数。则:dp[i][j]=∑k=1i−...原创 2020-01-12 22:33:21 · 154 阅读 · 0 评论 -
Poj-2155 Matrix //二维差分+BIT
题目链接http://poj.org/problem?id=2155题意就是给一个 nnn 阶矩阵,初始时全为0,然后有 mmm 次操作,每次有两种操作:(1) CCC x1x_1x1 y1y_1y1 x2x_2x2 y2y_2y2:将这个子矩阵内的元素全部反转( 000变111,111变000 )(2)QQQ xxx yyy :查询矩阵 (x,y)(x,y)(x,y) ...原创 2020-02-29 20:58:23 · 295 阅读 · 0 评论 -
CF 629-D Babaei and Birthday Cake //dp+BIT
题目链接http://codeforces.com/problemset/problem/629/D题意很多蛋糕,每个蛋糕有高和半径,i号蛋糕能放在j号蛋糕的上面,当且仅当i>ji>ji>j且v[i]>v[j]v[i]>v[j]v[i]>v[j](v[i]v[i]v[i]指i号蛋糕的体积),让求最后可以得到的蛋糕的最大体积。解析类比着LIS,很容...原创 2020-01-12 22:09:47 · 266 阅读 · 0 评论 -
「学习笔记」线段树
目录一.线段树入门篇1.建立+单点更新+查询(1)建树模板(2)单点更新模板(3)查询模板(4)例题2.区间更新(1)区间更新模板(2)例题3.扫描线法4.离线询问5.树上二分6.优化建图7.维护可和信息8.维护不可和信息9.维护最大字段和二.线段树进阶篇1.分裂与合并2.可持久化(主席树)3.二维线段树与四分树一.线段树入门篇1.建立+单点更新+查询(1)建树模板#define lson...原创 2019-11-09 11:20:26 · 215 阅读 · 0 评论 -
「学习笔记」树上差分
学习链接点这里点差分/** * 设差分数组d[],对于一条链(u,v),各点权值加val * d[u]+=val,d[v]+=val * d[lca(u,v)]-=val,d[fa[lca(u,v)]]-=val * 单点查询转化为该点在内的子树和查询 * 链缩成点同样适用,所以如果初始时各点有值,就将各点值也维护到差分数组中去 */边差分/** * 需把边塞给点,即是塞给这条边所连的深度较深的节点 * 设差分数组d[],对于一条链(u,v),路径边权都增加val * d[u]+原创 2020-07-11 13:24:14 · 187 阅读 · 0 评论 -
Poj-1990 MooFest //树状数组
题目链接http://poj.org/problem?id=1990题意一共 nnn 头牛,每头牛有两个属性 pos,vpos,vpos,v,pospospos 指牛的位置,vvv 指牛的听力值。如果两头牛(编号为 i,ji,ji,j )需要交谈,需要的音量值为 dis(posi,posj)∗max(vi,vj)dis(pos_i,pos_j)*max(v_i,v_j)dis(posi,p...原创 2020-02-29 13:48:26 · 174 阅读 · 0 评论 -
MST Unification //最小生成树
题目链接:http://codeforces.com/problemset/problem/1108/F题意:给你一个图,有很多边,不会有自环和重边,可能现在这个图的mst不唯一,让你改变一些边的权值使得mst唯一,求最小操作次数。思路:通过分析可以看出,只有边权相等的一些边,才会使mst不唯一,所以只去找这些边权相等且所连顶点又在mst中的边就行了。#include <bit...原创 2019-11-20 18:30:38 · 241 阅读 · 0 评论 -
CF Round #678 (Div. 2) E.Complicated Computations //权值线段树
题目链接https://codeforces.ml/contest/1436/problem/E题意 定义 MEX 为一个序列没有出现的最小正数,现给定你一组序列,求出该序列的任意非空子区间的 MEX,然后这些 MEX 组成一个新序列,让你求该新序列的 MEX思路 不难得出,新序列的数据范围为:[1,n+1][1,n+1][1,n+1],那么这组新序列的 MEX 的数据范围为:[1,n+2][1,n+2][1,n+2],直接找不好找,不妨先找到哪些数一定不是新序列的 MEX,可以确定的是这些数原创 2020-11-04 17:53:47 · 262 阅读 · 0 评论 -
Hdu-4126 Genghis Khan the Conqueror //MST+树形dp
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4126题意简而言之,就是给你一张图(稠密图),现在有 QQQ 次修改,每次依原图更改一条边的权值(只会比原图的大),让你求出每次更改后的最小生成树权值,取这 QQQ 次最小生成树权值的平均值思路我们先不考虑修改,就是求出原图的最小生成树,由于是稠密图,所以一般用 primprimprim 算法,...原创 2020-03-23 17:40:42 · 208 阅读 · 0 评论 -
Shortest Cycle(思维+floyd找最小环)
题目链接:https://codeforc.es/contest/1206/problem/D题意:给你n个数,任意两个&在一起不为0的数可以连一条边,求这n个数中形成的最小环。解析:如果两个数,他们二进制中有一位都是1,他们&的结果就不会是0,有三个这样的数就会形成最小环。所以可以枚举每个数的所有位,看是否存在三个这样的数,若存在,直接输出3.若不存在,再看下一步。假设最坏...原创 2019-08-22 11:20:37 · 316 阅读 · 0 评论 -
Connected Components(连通分量)
题目链接:https://cn.vjudge.net/problem/Aizu-ALDS1_11_D题目大意:通过输入的朋友关系,从指定人物出发通过双向朋友链是否能抵达目标任务;归结为求图中各连通分量。用邻接表来存图。通过dfs或bfs遍历图,给各连通图的点分配不同的颜色以便于区分。下面以dfs为例。代码如下:#include <iostream>#include <c...原创 2019-07-18 18:51:30 · 10913 阅读 · 0 评论 -
Assign the task //线段树+dfs序
链接点这里题意: 一个公司n个人,每个人都有上司,除了最大的boss,并且一个人上司的上司仍是他的上司,现在给某个人安排一项任务,等同于给他和他的下属安排这项命令,现在要给某个人赋予任务,或查询某个人现在的任务。解析: 这道题的线段树的单点查询与区间更新很好维护,主要是怎样找对应人在线段树中的位置,利用dfs序即可解决。详细内容看代码。#include <iostream>#i...原创 2019-09-17 17:34:07 · 153 阅读 · 0 评论 -
「学习笔记」2-SAT
2-SAT一.原理二.习题练习1.2.3.4.一.原理二.习题练习1.题目来源:题意:解析:2.题目来源:题意:解析:3.题目来源:题意:解析:4.题目来源:题意:解析:原创 2021-01-10 13:47:15 · 1368 阅读 · 2 评论 -
Hdu 4578-Transformation //线段树合并
题目链接题意: 有一序列,初始时全为0,可以进行以下四种操作:(1)1 l r v : 将区间[l,r]每个数都加v。(2)2 l r v : 将区间[l,r]每个数都乘v。(3)3 l r v : 将区间[l,r]每个数都变成v。(4)4 l r p : 求区间[l,r]各项的p次方相加的和。要求以上操作结果都模上10007解析:(1)涉及区间更新,所以我们需要三个懒惰数组,ta...原创 2019-09-22 14:04:29 · 165 阅读 · 0 评论 -
Poj-2991 Crane //线段树+计算几何
题目链接http://poj.org/problem?id=2991题意简而言之,就是有 nnn 条接在一起的线段,最初是在同一条直线上,然后有 mmm 次操作,每次可以修改某两个相邻线段间的角度,然后问最后一条线段末端的坐标。思路如果把每个线段看成一个向量(x,y)(x,y)(x,y),然后向量间的加减操作很简单,也即是 x,yx,yx,y 的叠加。所以如果把每条线段看作是一个向量的话...原创 2020-02-15 17:04:04 · 496 阅读 · 0 评论 -
大学《数据结构》实验总结
#include <bits/stdc++.h>using namespace std;typedef struct node{ int data; struct node *next;}List;List *init()//初始化链表节点{ List *p=(List *)malloc(sizeof(List)); p->next=NU...原创 2019-09-20 16:20:54 · 5731 阅读 · 1 评论 -
Andrew and Taxi //二分+拓扑排序
题目链接:http://codeforces.com/problemset/problem/1100/E题意:一个有向图,将边权小于等于xxx的边反转后图中不会有环,最小化xxx,并输出反转的边的序号。思路:如果二分xxx,每次二分,用大于x的边建个图跑拓扑序,看是否最后有环,有环就扩大xxx,没有就缩小xxx寻找最优解,最后别忘再用最优解跑一次拓扑序,因为还要输出反转的边,那么在最优解...原创 2019-11-27 21:46:41 · 239 阅读 · 0 评论 -
Hdu 1285 :确定比赛名次(拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285Problem Description有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P...原创 2019-07-19 22:41:32 · 222 阅读 · 0 评论 -
小doge的快乐阳光跑 //最短路+dp
题目链接题意: 给一张图,让你求权值和路径最小的移动序列,使得移动序列包含两个给定的子序列。思路: 由于要求权值和最小,所以我们可以先把图上每两点的最短距离预处理出来。然后考虑移动序列,由于要保证包含两个子序列,考虑dp,设dp[i][j][0]表示刚好到了第一个人的第i个跑位点并已经过了第二个人的第j个跑位点的最短路径,dp[i][j][1]表示刚好到了第二个人的第j个跑位点并已经过了第一个...原创 2019-09-28 10:52:47 · 189 阅读 · 0 评论 -
最近公共祖先(LCA)//模板
题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入格式第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树)。接下来M行每行包含两个正整数a、b,表示询问a结点和b结点的最近公共祖先。输出格式输出包含M行,每行包含一个正整数,依次为...原创 2019-10-06 15:50:41 · 154 阅读 · 0 评论 -
The Shortest Statement //最短路+lca
题目链接:https://codeforces.com/problemset/problem/1051/F题意:一个图由若干顶点和若干边组成,且说边的个数减去顶点的个数不会多于二十,有很多组点对,问这些点对的最短距离为多少。解析:询问次数较多,不能每次都跑dij,由于题目给出边的个数减去顶点的个数不会多于二十,说明如果以原图去掉一些边建dfs树,最多要删21条边,所以可以把这些多余的边单...原创 2019-11-21 23:25:21 · 191 阅读 · 0 评论 -
「佛御石之钵 -不碎的意志-」 //并查集
题目链接:https://cometoj.com/contest/72/problem/%EF%BC%A32?problem_id=4032题意:给定一个图,针对每组询问,修改一些点的值为1,求四连通块的个数1.简单版解析:范围较小,直接暴力找即可。参考代码:#include <bits/stdc++.h>using namespace std;typedef long ...原创 2019-11-18 22:07:42 · 223 阅读 · 0 评论 -
Hdu-4417 Super Mario //主席树
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4417题意简而言之,就是给你一个序列,qqq 组询问,每次查询一个区间内,不大于 xxx 的数有几个。思路首先将原序列加上 qqq 组查询的数放一起离散化一下,然后根据离散化的序列前缀建 nnn 棵可持久化权值线段树,每次查询根据主席树的函数性质,前缀做差查询。查询操作:对于一个区间 [l,r]...原创 2020-03-23 20:46:24 · 159 阅读 · 1 评论 -
zzu-2050 大小接近的点对 //dfs序+主席树
题目链接http://acm.zzuli.edu.cn/problem.php?id=2520题意有一棵有根树,根结点编号为 111,编号为 iii 的结点的权值为 wiw_iwi,现在定义结点 (u,v)(u,v)(u,v) 为“大小接近的点对”,当且仅当满足: (1) uuu 是 vvv 的祖先结点(vvv 可以等于 uuu) (2) ∣wu−wv∣≤k|w_u-w_v|\leq k∣wu−wv∣≤k现在对于树上每个结点 iii,需要计算以其为根的子树中“大小接近的点对”的个数。原创 2020-09-23 08:46:00 · 196 阅读 · 0 评论 -
「计蒜之道」 2020-线上决赛 C-攀登山峰 //主席树上二分
题目链接https://nanti.jisuanke.com/t/49111题意nnn 个数,mmm 个操作,每个操作给3个数:l r tl \ r \ tl r t,让你输出这个区间满足个数超过r−l+1t\frac{r-l+1}{t}tr−l+1的最大的数。思路查询区间满足一定条件数,首先想到主席树,根据原序列建立主席树(可持久化权值线段树),查询的时候,优先去右边找,右边找不到再去左边找,这样能保证找到的数最大.代码#include <bi原创 2020-10-24 20:05:54 · 282 阅读 · 0 评论 -
Poj-2104 K-th Number //区域树/主席树
题目链接http://poj.org/problem?id=2104题意给定 nnn 个数,mmm 组询问,每次询问一个区间的第 kkk 小的数是多少。简而言之,就是静态查询区间第 kkk 小思路这个题有多种做法,第一种是利用区域树来做,当线段树的每个结点维护的是一个有序数列或一棵树时,这样的线段树叫做区域树。这里我们让线段树的每个结点维护一个有序数列,然后建树的过程类似于归并排序,然后...原创 2020-03-01 20:44:06 · 153 阅读 · 0 评论 -
「学习笔记」单调队列
单调栈一.原理二.习题练习1.Sliding Window2.Non-negative Partial Sums3.One hundred layer4.Balanced Playlist5.OpenStreetMap一.原理单调队列,顾名思义,就是从队头到队尾有序的队列,它和单调栈一样也只是一种思想,这种思想借助队列先进先出的特性,在一些特定场合应用起来能够有效的降低时间复杂度,比如优化dp...原创 2020-01-22 00:10:19 · 244 阅读 · 0 评论 -
Moo University - Financial Aid //优先队列
题目链接http://poj.org/problem?id=2010题意给定CCC个数对儿,其中每对儿第一个数表示分数,第二个表示花费。现在要求去这CCC个数对儿中找出NNN个(NNN为奇数),在这NNN个数对儿的花费总和不超过FFF的前提下,分数的中位数最大。思路需要先对这CCC个数对儿按照分数从小到达排序,我们如果能维护排序后每个数对儿:去其前面找N2\frac{N}{2}2N个数...原创 2020-01-27 15:39:51 · 260 阅读 · 0 评论 -
「学习笔记」树点分治
目录:一.思想二.例题1.洛谷模板(P3806)一.思想二.例题1.洛谷模板(P3806)题目链接在这题目描述给定一棵有n个点的树询问树上距离为k的点对是否存在。输入格式n,m 接下来n-1条边a,b,c描述a到b有一条长度为c的路径接下来m行每行询问一个K输出格式对于每个K每行输出一个答案,存在输出“AYE”,否则输出”NAY”(不包含引号)#include <b...原创 2019-10-04 15:13:10 · 186 阅读 · 0 评论 -
「学习笔记」单调栈
单调栈一.原理二.习题练习1.Largest Rectangle in a Histogram2.Bad Hair Day3.Largest Submatrix of All 1’s4.Feel Good5.Largest Common Submatrix6.I Max answer一.原理单调栈,顾名思义,就是从栈底到栈顶有序的栈,很多人认为其只是一种思想,这种思想借助栈后进先出的特性,在一...原创 2020-01-15 21:26:37 · 443 阅读 · 0 评论