数据结构
文章平均质量分 52
数据结构
学不会dp QAQ
这个作者很懒,什么都没留下…
展开
-
codeforces data structures解题记录
文章目录1200~14991500~17991800~20992100~23992400~26992700~2999over 30001200~14991519Cvoid problem_solver() { int n; cin>>n; vector<vector<int>>g(n+1); vector<int>p(n); for(int i=0;i<n;i++) cin>>p[i]; for(int i=0;i<n;原创 2022-03-16 00:35:34 · 251 阅读 · 0 评论 -
洛谷P3714 [BJOI2017]树的难题 【点分治,线段树合并】
题目链接题意给出一棵树,每条边有一种颜色,每种颜色都有相应的权值。一条路径的权值为:连续相同的颜色视为一段,权值为所有颜色段对应的权值和,比如路径颜色为:1 1 1 2 3 1 1 4 4,那么颜色段为:1 2 3 1 4。求长度在[L,R][L, R][L,R]范围内的路径的最大权值题解看到树上路径问题显然想到点分治,但是求出子树的各路径权值后,不能直接选最大的相加,假如两条子树路径的初始颜色一样那就得减去一次初始颜色权值。所以得开两颗线段树(线段树用来维护路径长度在[x,y][x,y][x,y原创 2021-11-09 12:53:43 · 295 阅读 · 0 评论 -
洛谷P1486 [NOI2004] 郁闷的出纳员 【平衡树】
题目链接题意给出一个下限 limitlimitlimit,需要一种数据结构 TTT 支持以下 3 种操作向 TTT 中插入一个数 XXX,如果 XXX 小于 limitlimitlimit 则不插入TTT中 所有数都加上/减去 XXX,并删去 TTT 中小于 limitlimitlimit 的数查询 TTT 中第 XXX 大对于每个操作 3 输出答案,如果 TTT中少于 XXX 个数则输出-1最后一行输出一共删去了几个数题解可以用 fhq treap 来维护,对于减少操作就把小于XXX原创 2021-11-07 14:18:58 · 101 阅读 · 0 评论 -
Codeforces Round #276 (Div. 1) E. Sign on Fence【主席树区间合并 + 二分】
题目链接#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#include<unordered_map>#include<set>#include<vector>#include<stack>#include <utility>#include<list&原创 2021-10-23 01:49:57 · 73 阅读 · 0 评论 -
HDU1540 Tunnel Warfare【线段树区间合并、平衡树】
题目链接题意有一段连续的序列[1,2,3,...,n][1,2,3,...,n][1,2,3,...,n],有3种操作删除数字 KKK,KKK的两边断开询问数字 KKK 所在的连续段的长度(若KKK被删除则长度为0)回撤上一次删除操作题解有两种做法线段树区间合并,记录区间的最长左连续段长度和最长右连续段长度平衡树记录删除的结点,询问的答案就是 KKK的后继-前驱-1#include<iostream>#include<sstream>#include&原创 2021-10-22 23:42:45 · 84 阅读 · 0 评论 -
洛谷P3810 【模板】三维偏序(陌上花开)【CDQ分治、树套树】
题目链接题意给出 nnn 个点,每个点有三个属性 X,Y,ZX,Y,ZX,Y,Z,f[i]f[i]f[i] 表示点对(i,j)(i,j)(i,j)满足Xi<Xj, Yi<Yj, Zi<ZjX_i < X_j,\ Y_i<Y_j,\ Z_i<Z_jXi<Xj, Yi<Yj, Zi<Zj的 jjj 的个数,求 f[0...n−1]f[0...n-1]f[0...n−1]题解CDQ分治的模板题,先对第原创 2021-10-20 22:14:11 · 138 阅读 · 0 评论 -
Educational Codeforces Round 22 E. Army Creation 【主席树】
题目链接题意给出一个序列a[1..n]a[1..n]a[1..n],mmm 次询问区间 [L,R][L,R][L,R] 可以选多少个数(相同的数最多选 KKK 个),强制在线题解先求出每个 iii 能被选到的最右的位置 to[i]to[i]to[i] 如果右边区间里面的 a[i]a[i]a[i]个数小于 KKK,说明每个 a[i]a[i]a[i] 可以被选到,即to[i]=n+1to[i]=n+1to[i]=n+1;如果大于KKK,则to[i]to[i]to[i]为它右边第KKK个的位置。主席树维原创 2021-10-20 20:13:10 · 109 阅读 · 0 评论 -
Codeforces Round #404 E. Anton and Permutation【树套树】
题目链接题意一个序列 a[1...n]a[1...n]a[1...n] 初始 a[i]=ia[i]=ia[i]=i,mmm次操作,每次交换 a[l]a[l]a[l] 和 a[r]a[r]a[r] ,每次操作完输出当前序列的逆序对数题解树状数组套主席树,主席树单点修改,再通过树状数组进行区间修改,维护区间 [u,v][u,v][u,v] 里,大小在[x,y][x,y][x,y] 范围内的值的个数#include<iostream>#include<sstream>#inc原创 2021-10-19 22:31:00 · 116 阅读 · 0 评论 -
Codeforces Round #474 F. Pathwalks【主席树】
题目链接题意给出一个 nnn 个结点的无向图图,找出边权递增且边的编号(即输入顺序)递增的路径的最长长度题解对于结点 XXX,用线段树维护所有能到达 XXX 的边中边权在 [L,R][L,R][L,R] 区间内最长的路径,一共需要 nnn 颗线段树,所以采用主席树#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#incl原创 2021-10-18 13:27:38 · 89 阅读 · 0 评论 -
Codeforces Round #254 (Div. 1) C. DZY Loves Colors【序列分块】
题目链接题意有一个序列 a[1...n]a[1...n]a[1...n],序列每个点都有一个权值bbb ,初始 a[i]=i,b[i]=0a[i]=i,b[i]=0a[i]=i,b[i]=0,进行 mmm 次操作,操作有两种把 [X,Y][X,Y][X,Y] 区间每个 a[i[a[i[a[i[ 都变成 ZZZ,同时b[i]+=abs(a[i]−Z)b[i]+=abs(a[i]-Z)b[i]+=abs(a[i]−Z)查询 [X,Y][X,Y][X,Y] 区间的权值和题解n≤105n\le10^原创 2021-10-14 20:31:45 · 52 阅读 · 0 评论 -
Codeforces Round #275 D. Interesting Array 【线段树】
题目链接题意构造一个长度为 nnn 序列满足 mmm 个限制条件,限制条件的格式为:对于区间 [L,R][L,R][L,R] 与运算结果为 XXX题解线段树维护区间 &,先记录下每个限制条件,然后对于限制 L,R,XL,R,XL,R,X ,将区间 [L,R][L,R][L,R] 对 XXX 进行或运算,这样能保证[L,R][L,R][L,R]与运算结果为XXX,最后遍历一遍限制条件,看是否都符合#include<iostream>#include<sstream>原创 2021-10-13 18:19:04 · 65 阅读 · 0 评论 -
Codecraft-18 and Codeforces Round #458 D. Bash and a Tough Math Puzzle【线段树】
题目链接题意给出一段序列 a[1...n]a[1...n]a[1...n],进行以下操作单点修改查询能否至多修改一个数,使区间 [L,R][L,R][L,R] 的GCD为 xxx 的倍数题解线段树维护区间GCD,查询的时候一共有 3 种情况左子树 GCD%x=0, 右子树 GCD%x=0,此时答案为YES左右子树其中一颗 GDD%x=0,另一颗 GCD%x!=0,递归那颗不为 GCD%x!=0 的左右子树 GCD%x 都不为0,答案为NO,因为左右子树至少都需要修改一次#incl原创 2021-10-13 00:51:15 · 68 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) E. Danil and a Part-time Job 【线段树】
题意给出一棵以1为根结点树,每个结点有一个灯,进行两种操作:改变结点 xxx 及其子树的灯的状态(开变关,关变开)查询结点 xxx 及其子树中亮着的灯数题解以DFS序建立线段树,每个子树都是一段连续区间,然后就是线段树基本操作了#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#include<unordere原创 2021-10-13 00:40:45 · 73 阅读 · 0 评论 -
Codeforces Beta Round #19 D. Points 【线段树、set】
题目链接题意在坐标系中有三种操作增加一个点 (x,y)(x,y)(x,y)删除点 (x,y)(x,y)(x,y)查询严格在点 (x,y)(x,y)(x,y) 右上角的点中,横坐标最小的点,如果有多个点,选择纵坐标最小的那个题解先把坐标离散化,set[x]set[x]set[x] 维护横坐标 xxx 上的点,线段树维护 xxx 轴上区间内最高的 yyy 坐标#include<iostream>#include<sstream>#include<string原创 2021-10-13 00:35:21 · 106 阅读 · 0 评论 -
A Simple Problem with Integers【线段树】
题解线段树的模板题,注意好好理解一下lazytag:假如对 [1,5] 区间 +1,那可以在线段树[1,4]这个位置打一个标记,不继续递归往下更新,直到需要修改或查询它的儿子结点#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#include<set>#include<vector>#include原创 2021-10-11 22:03:41 · 70 阅读 · 0 评论 -
HDU 敌兵布阵【线段树】
题解线段树模板#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#include<unordered_map>#include<set>#include<vector>#include<stack>#include <utility>#include<l原创 2021-10-11 21:52:21 · 57 阅读 · 0 评论 -
整理一下数据结构及其例题
文章目录栈队列单调栈、单调队列链表分块序列分块树分块ST表并查集树状数组线段树普通线段树权值线段树势能线段树猫树ZKW线段树李超线段树平衡树fhq treapSplay可持久化数据结构可持久化线段树(主席树)可持久化并查集可持久化平衡树可持久化字典树其他奇怪的数据结构Link Cut TreeSqrt TreeK-D Tree析合树珂朵莉树栈洛谷P1739洛谷P1165(同时也能作为一个很好的堆的例题)队列单调栈、单调队列洛谷P5788洛谷P1901链表分块序列分块洛谷P2023树分原创 2021-10-10 01:21:30 · 152 阅读 · 0 评论 -
P6177 Count on a tree II/【模板】树分块
题目链接题意:一棵树上每个结点都有一个值,q次询问,每次询问 U—>V 路径上有多少个不同的值题解:树分块+bitset能过,还挺快的。但是不开O2的话要算一下块的大小,大一点点超内存,小一点超时#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#include<unordered_map>#inclu原创 2021-10-08 15:45:07 · 63 阅读 · 0 评论 -
洛谷 P2023 [AHOI2009] 维护序列 【序列分块】
题目链接题意:构建一种数据结构,支持区间乘区间加区间求和题解:一看就是线段树的模板题,但我就要用分块(顺便加上丑陋的压行#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#include<unordered_map>#include<set>#include<vector>原创 2021-10-08 15:31:52 · 161 阅读 · 1 评论 -
洛谷P3834 【模板】可持久化线段树 2 【主席树】
题目链接题意:查询区间第 kkk 小题解:主席树的模板题#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#include<unordered_map>#include<set>#include<vector>#include<stack>#include <u原创 2021-08-15 21:02:59 · 100 阅读 · 0 评论 -
洛谷 P3919 【模板】可持久化线段树 1(可持久化数组)【主席树】
题目链接题意:给出一个数组,有两种操作,每次操作完会产生一个新版本的数组将版本 ververver 的第 PPP 个数改为 valvalval查询版本 ververver 的第 PPP 个数其中对于操作2,会产生一个和老版本一样的版本题解:。。。纯模板题#include<iostream>#include<sstream>#include<string>#include<queue>#include<map>#incl原创 2021-09-17 20:35:28 · 152 阅读 · 0 评论 -
洛谷 P3835 【模板】可持久化平衡树 【可持久化无旋treap】
题目链接题意:就是比普通平衡树多了一个持久化的操作题解:写起来和普通的平衡树没什么区别,因为fhq treap的根节点会变,所以要维护一下每个版本的根,然后在split的时候开个新点就好了(好像很多洛谷的题解在merge操作也开了新点,但是合并不会改变树的结点,所以开不开无所谓)#include<iostream>#include<sstream>#include<string>#include<queue>#include<map&g原创 2021-09-18 00:39:14 · 123 阅读 · 0 评论 -
洛谷P1110 [ZJOI2007]报表统计 【无旋treap+堆】
题目链接题意:给出一个长度为 NNN 的原序列,有如下几种操作在第 i 的位置后插入一个新元素 val ,若 i$后面已经插入过元素,则插入元素的尾部(即若原序列为 1 2 3,在 2 后面插入 4 变为 1 2 4 3 ,再在2后面插入 5 则变为 1 2 4 5 3)查询所有相邻元素的差值绝对值的最小值 min_gap查询所有元素差值绝对值的最小值 min_sort_gap题解:如果只有操作 1 和操作 3 ,就是平衡树的模板题,每插入一个数val 都查询 val前驱和后继与 val原创 2021-09-17 01:09:06 · 139 阅读 · 0 评论 -
洛谷 P3165 [CQOI2014]排序机械臂 【无旋treap、Splay】
题目链接题意:给出一个数组,找到并输出第 iii 小的数的位置 PPP,然后翻转区间 [i,P][i,P][i,P] ,重复 nnn 次,即最后数组的非降序的题解:每次反转一个区间同时要快速找到最小数的位置,有点像文艺平衡树,可以用treap或者Splay实现,Splay暂时还不会,下次来补treap:#include<iostream>#include<sstream>#include<string>#include<queue>#inc原创 2021-09-10 22:55:48 · 98 阅读 · 0 评论 -
洛谷 P3369 【模板】普通平衡树 【无旋treap、Splay、pb_ds】
题目链接题意:写一种数据结构,来维护一些数,其中需要提供以下操作:插入 xx 数删除 xx 数(若有多个相同的数,因只删除一个)查询 xx 数的排名(排名定义为比当前数小的数的个数 +1+1 )查询排名为 xx 的数求 xx 的前驱(前驱定义为小于 xx,且最大的数)求 xx 的后继(后继定义为大于 xx,且最小的数)题解:平衡树的模板题,但是treap相较于其他的BST更好写、更好理解#include<iostream>#include<sstream>原创 2021-09-03 15:31:56 · 228 阅读 · 1 评论