
★数据结构
文章平均质量分 62
墓华
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ-1177 Picture(线段树+扫描线)
链接:POJ-1177 Picture题意给出平面直角坐标系上nnn(0≤n≤50000\le n\le 50000≤n≤5000)个矩形,求所有矩形合并后的所有线段长度之和。分析以计算 水平线段(平行于xxx轴)的长度之和 为例,竖直扫描线(平行于yyy轴)水平扫过 各矩形的 左、右边界;可以发现,每扫过单位水平长度,水平线段长度之和应当增加 当前竖直方向的线段数目∗2*2∗2;...原创 2020-02-12 13:06:55 · 422 阅读 · 0 评论 -
牛客挑战赛36 C-纸飞机(最长非降子序列)
链接:牛客挑战赛36 C-纸飞机题意:给出长度为nnn(1≤n≤1061\le n\le 10^61≤n≤106)的序列a1,a2,⋯ana_1,a_2,\cdots a_na1,a2,⋯an(1≤ai≤2301\le a_i\le 2^{30}1≤ai≤230),求分别删除aia_iai后最长严格下降子序列的个数。分析:根据Dilworth定理,就是求分别删除aia_iai...原创 2020-01-18 11:40:57 · 363 阅读 · 0 评论 -
Gym101630 - A Archery Tournament(线段树)
链接:Gym101630 - A Archery Tournament题意:共nnn个操作:操作1:放置一个圆形靶子,中心在(xi,yi)(x_i,y_i)(xi,yi),其中yi≥0y_i\ge 0yi≥0且靶子一定相切于xxx轴(即半径ri=yir_i=y_iri=yi),不同靶子之间不会有重叠(可能相切);操作2:投掷一个飞镖至(xj,yj)(x_j,y_j)(xj,yj...原创 2019-10-25 13:13:10 · 487 阅读 · 0 评论 -
HDU - 5536 Chip Factory(带删除操作01字典树)
链接:HDU - 5536 Chip Factory题意:原创 2019-08-09 18:39:43 · 216 阅读 · 0 评论 -
主席树 —— ②静态区间第K小
静态区间第K小给出一段长度序列 a[1]、a[2]、… 、a[N],每次询问 [L, R] 区间内第K小的数为?我们可以建立 权值线段树,线段树内存储 某个权值的出现次数。对于 [L, R] 区间(a[L] ~ a[R]),构建的线段树以下示例参考blog:https://www.cnblogs.com/LiuRunky/p/Sustainable_Segment_Tree.html...原创 2019-07-28 16:29:48 · 648 阅读 · 0 评论 -
2019多校第四场 HDU6621 K-th Closest Distance(二分,主席树(可持久化线段树) )
链接:HDU6621 K-th Closest Distance题意:给出一段长度为n≤105n\le10^5n≤105的序列a1,a2,... ,an(a≤106)a_1,a_2,...\, ,a_n(a\le10^6)a1,a2,...,an(a≤106),有m≤105m\le 10^5m≤105次询问:L  R&Thi...原创 2019-08-01 19:26:11 · 385 阅读 · 0 评论 -
主席树 —— ①可持久化线段树
可持久化线段树主席树,即 可持久化线段树。可持久化:可以找到每次修改时的线段树,即 保存了线段树各个历史版本 ,这样就可以快速查询到第 i 次修改前线段树的状态。核心思想:与历史版本的线段树共用部分结点。很明显每次新建一棵线段树带来的时空消耗是难以承受的,但是可以发现,每次单点修改时,只会变动logN个结点(即从根结点到对应叶结点的路径),所以剩下的结点都可以和前一个版本的线段树共用。(所...原创 2019-07-28 15:17:03 · 311 阅读 · 0 评论 -
2019多校第六场 HDU6638 Snowy Smile(区间最大子段和)
链接:HDU6638 Snowy Smile题意:给出平面直角坐标系上n(≤2000)n(\le 2000)n(≤2000)个点(xi,yi)(x_i,y_i)(xi,yi),每个点都有一个权值wi  (−109≤xi,yi,wi≤109)w_i\;(-10^9\le x_i,y_i,w_i\le10^9)wi(−109≤xi,yi,wi≤109),选取...原创 2019-08-08 10:08:35 · 1219 阅读 · 0 评论 -
线段树——区间最大子段和问题(SPOJ - GSS1)
问题描述:给定一段长度为nnn的序列a1,a2,…,ana_1,a_2,\dots,a_na1,a2,…,an(aaa有正亦有负),每次 询问[L,R][L,R][L,R](即aLa_LaL~aRa_RaR)范围内的最大字段和,并涉及 单点修改 操作。【线段树】 维护区间最大子段和:①定义:线段树一共要维护444个值,如下:(每个值的含义都是相对于该结点对应区间[l,r][...原创 2019-08-08 09:22:02 · 1028 阅读 · 1 评论 -
树状数组 简单介绍
树状数组即用数组模拟树形结构,令修改和查询的时间复杂度变为O(logN),能用树状数组解决的问题都可以用线段树解决,树状数组相对于线段树功能更为局限(一般是对 区间和 进行维护),但树状数组花费空间更小(和原数组相同),更易编写。注意点:单点更新 操作 不能直接替换值,只能 加上和原值的差区间查询 操作,得到的是 前缀和(即 a[1] ~ a[i] 的和)具体操作树状数组如上...原创 2019-07-27 16:40:26 · 216 阅读 · 0 评论 -
2019多校第二场 HDU6602 Longest Subarray(思维,线段树区间修改维护最值)
链接:HDU6602 Longest Subarray题意:含有 长度为N的序列 a[1]、a[2]、… 、a[N](其中 1 ≤ a[i] ≤ C )连续子序列 a[L]、a[L+1]、… 、a[R], 对于 1 ~ C的任意一个数,如果出现了,其 出现次数必须 ≥ K(即要求 出现次数 == 0 或 ≥ K)问满足上述条件的最长连续子序列长度为多少?(N,C,K ≤ 105)分析...原创 2019-07-27 14:19:07 · 1302 阅读 · 5 评论 -
2019多校第三场 HDU6606 Distribution of books(二分,权值线段树维护,DP)
链接:HDU6606 Distribution of books题意:将一个长度为n的序列a[1]、a[2]、… 、a[n], 要求取前k段(要求各段连续,但不可交叉,每段元素个数≥1),使得最大的那段和最小,并输出该和。1 <= n <= 2*1051 <= k <= n-109 <= ai <= 109分析:...原创 2019-07-31 09:29:59 · 258 阅读 · 0 评论 -
2019多校第二场 HDU6592 - Beauty Of Unimodal Sequence(贪心,线段树)
链接: HDU6592 - Beauty Of Unimodal Sequence 题意:含有 n 个正整数的序列 a[1]、a[2]、… 、a[n],找出 最长的单峰序列(先严格递增后严格递减,允许仅严格递增或仅严格递减)。要求分别输出所有最长的单峰序列 字典序最小 和 字典序最大 的序列(按其下标排序,输出时也是输出下标)分析:先预处理得到这两个数组:dec[i]:以 a[i] ...原创 2019-07-25 17:44:12 · 455 阅读 · 2 评论 -
2019多校第二场 HDU6601 Keen On Everything But Triangle(静态主席树,斐波那契数列)
链接: HDU6601 Keen On Everything But Triangle题意:给出一段长度为N的序列a[1]、a[2]、… 、a[N],每次询问[L,原创 2019-07-28 19:01:45 · 269 阅读 · 0 评论 -
01字典树小结
简介010101字典树,就是将字典树中的字符aaa ~ zzz换为二进制的0/10/10/1,得以存储数的二进制形式。对于结点uuu,有代表下一位为000的左儿子:ch[u][0]ch[u][0]ch[u][0],代表下一位为111的右儿子:ch[u][1]ch[u][1]ch[u][1]而字典树的根(u=0u=0u=0)表示最高位+1+1+1位,故其代表0;字典树的叶结点vvv则表示最低位...原创 2019-08-09 15:24:27 · 335 阅读 · 0 评论 -
POJ - 3764 The xor-longest Path(树上两点路径边权异或和,01字典树)
链接:POJ - 3764 The xor-longest Path题意:给出一棵n(1≤n≤100000)n(1\le n\le100000)n(1≤n≤100000)个结点的树,每条边具有边权w(0≤w≤231)w(0\le w\le 2^{31})w(0≤w≤231),结点编号从000到n−1n-1n−1。要求求出 异或和最大的路径(即路径上所有边权www异或和最大),所有结点均可作为起...原创 2019-08-09 17:25:23 · 684 阅读 · 0 评论 -
数据结构 —— 树链剖分小结
定义:即轻重链剖分,通过轻重边剖分将树分为多条链,然后再通过数据结构来维护每一条链。主要用于解决 树上 对 点权 的 区间操作 (更新/查询) 问题。相关概念:重儿子:对于 一个 非叶结点,其所有子结点中 子树结点数最多 的 子结点(只选一个)轻儿子:对于 一个 非叶节点,其 除重结点以外 的 子结点重边:连接 非叶结点 和其 重儿子 的 边轻边:连接 非叶结点 和其 轻儿子 ...原创 2019-08-16 10:00:37 · 269 阅读 · 0 评论 -
CodeForces - 482D Kuro and GCD and XOR and SUM(01字典树)
链接:CodeForces - 482D Kuro and GCD and XOR and SUM题意:给一个空的集合aaa,共有q  (2≤q≤105)q\;(2\le q\le 10^5)q(2≤q≤105)次操作,分为以下222种操作1  ui1\;u_i1ui:将uiu_iui加入到集合aaa中&ThickSpac...原创 2019-08-13 11:39:52 · 256 阅读 · 0 评论 -
洛谷 P2146 [NOI2015]软件包管理器(线段树区间更新,树链剖分)
链接:洛谷 P2146 [NOI2015]软件包管理器题意:共有nnn个软件包,编号000 ~ n−1n-1n−1,除000号软件包以外的其他软件包均需要依赖其他软件包才能安装。所以,若要安装一个软件包,除000号软件包外都需要已经安装了其依赖的软件包;若要卸载一个软件包,依赖该软件包的软件包都会被卸载。有q个操作,分为如下222种:install x:表示安装软件包xuninstall...原创 2019-08-16 11:48:05 · 245 阅读 · 0 评论 -
2019CCPC网络赛 HDU6705 - path(图论,优先队列)
链接:HDU6705 - path题意:给出一个带边权有向图,含有nnn个结点mmm条边,共qqq次询问,每次询问在所有路径中第kkk小的路径边权和是多少?(一条边可以走无限次)(1≤n,m,q,k≤5∗104)(1≤n,m,q,k≤5∗10^4)(1≤n,m,q,k≤5∗104)分析:每次 把边权和尽量小的路径状态 放入优先队列中,每次从队首取出当前最小路径(即第iii小),利...原创 2019-08-25 20:04:59 · 575 阅读 · 0 评论 -
洛谷 P2486 [SDOI2011]染色(线段树区间更新,树链剖分)
链接: 洛谷 P2486 [SDOI2011]染色题目描述输入格式输出格式对于每个询问操作,输出一行答案。输入输出样例输入 #16 52 2 1 2 1 11 21 32 42 52 6Q 3 5C 2 1 1Q 3 5C 5 1 2Q 3 5输出 #1312分析:树上区间操作,首先进行树链剖分。对于每一条链,线段树进行区间维护,对...原创 2019-08-16 11:14:11 · 279 阅读 · 0 评论 -
2019CCPC网络赛 HDU6703 - array(线段树查询时剪枝)
链接:B - array题意:给出nnn个数的数组a1,a2,⋯ ,an  (∀i∈[1,n],1≤ai≤n≤105)a_1,a_2,\cdots,a_n\;(∀i∈[1,n],1≤a_i≤n\le10^5)a1,a2,⋯,an(∀i∈[1,n],1≤ai≤n≤105),其中aaa各不相同。给出m  ...原创 2019-08-25 13:39:10 · 356 阅读 · 0 评论 -
2019多校第九场 HDU6681 Rikka with Cake(欧拉图论定理,线段树)
链接:HDU6681 Rikka with Cake题意:给出一个笛卡尔坐标系中左下角坐标为(0,0)(0,0)(0,0),右上角坐标为(n,m)(n,m)(n,m)的矩形,有K  (≤105)K\;(\le 10^5)K(≤105)条射线,起点在矩形内部,其坐标为(xi,yi)(x_i,y_i)(xi,yi),方向为上/下/左/右(U/D/L/R)U/D/L/...原创 2019-08-20 14:47:09 · 218 阅读 · 0 评论 -
HYSBZ - 4260 Codechef REBXOR(前缀和求区间连续异或和,01字典树)
链接:HYSBZ - 4260 Codechef REBXOR题意:其中2≤N≤4∗1052\le N\le4*10^52≤N≤4∗105,0≤Ai≤1090\le A_i\le 10^90≤Ai≤109分析:由于异或的性质:a⊕a=0a\oplus a=0a⊕a=0,0⊕a=a0\oplus a=a0⊕a=a所以 连续区间的异或和a[L]⊕a[L+1]⊕⋯⊕a[R]a[L]\op...原创 2019-08-09 19:52:03 · 352 阅读 · 0 评论 -
2019多校第五场 HDU6625 three arrays(贪心,带删除操作01字典树)
链接:HDU6625 three arrays题意:给出长度为nnn的两个序列aaa和bbb,对序列内随意排序,a[i]⊕b[i]=c[i]    (1≤i≤n)a[i]\oplus b[i]=c[i]\;\;(1\le i\le n)a[i]⊕b[i]=c[i](1≤i≤n),这样得到序列ccc,要求得出字典序最小的序列ccc。其中1...原创 2019-08-09 19:44:09 · 301 阅读 · 0 评论 -
2019CCPC-江西省赛 A-Cotree(树的重心)
链接:JXCPC A-CotreeAvin has two trees which are not connected. He asks you to add an edge between them to make them connected while minimizing the function ∑i=1n−1∑j=i+1ndistance(i,j)\sum_{i=1}^{n-1}\...原创 2019-07-21 20:05:55 · 1898 阅读 · 0 评论 -
2019多校第三场 HDU6609 Find the answer(权值线段树)
链接:HDU6609 Find the answer题意:给出一段长度为n的序列w[1]、w[2]、… 、w[n](1 ≤ w ≤ m),对于任意 i ∈[1, n ],最少 要令多少 w[j] (其中 j ∈[1, i-1])变为0,才能使得∑k=1iw[k]⩽m\sum_{k=1}^{i}w[k]\leqslant mk=1∑iw[k]⩽m分析:对w[i],先求一下前缀和sum,...原创 2019-07-30 17:44:10 · 457 阅读 · 0 评论 -
主席树 —— ③动态区间第K小(树套树,带修改主席树)
动态区间第K小动态区间第K小,又称带修改主席树(动态主席树),对于初学真的不太友好。因为这个和静态区间第K小(静态主席树)数据结构都完全不同了。和求静态第K小一样,我们要得到[L, R]状态的线段树,才能进行二分得到第K小。静态主席树 是一个 可持久化线段树,每次利用 前缀和来计算[L, R]状态,但是前缀和就不便于进行修改操作了,那么对于可修改的区间求和,我们就要用到 树状数组/线段树。...原创 2019-07-29 10:51:12 · 1312 阅读 · 0 评论 -
7-15 二叉树上你和我(二叉树的建立与遍历)
给出一个n个结点的二叉树的前序和中序遍历,初始权值为0,有如下3个操作分别1 x val2 x val3 x分别代表 x的子树的权值都加val包括x。根到x上的结点都减val包括x。输出层次x的结点权值总和。不存在该层的话输出-1。输入格式:第一行一个n,第二行和第三行分别是前序和中序遍历,接下来为m个操作。1≤n≤30,−100≤val≤100输出格式:对于询问3的...原创 2019-03-07 13:15:37 · 370 阅读 · 2 评论 -
PAT Advanced1099 Build A Binary Search Tree(二叉查找树 BST)
链接:PAT Advanced1099A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node...原创 2019-01-23 15:09:06 · 185 阅读 · 0 评论 -
PAT Advanced1064 Complete Binary Search Tree(二叉查找树 BST)
链接:PAT Advanced1064A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node...原创 2019-01-23 14:43:21 · 196 阅读 · 0 评论 -
PAT Advanced1043 Is It a Binary Search Tree(二叉查找树 BST)
链接:PAT Advanced1043A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less thanthe node’...原创 2019-01-23 13:34:32 · 225 阅读 · 0 评论 -
PAT Advanced1106 Lowest Price in Supply Chain(树,DFS)
链接:PAT Advanced1106A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone involved in moving a product from supplier to customer.Starting from one root sup...原创 2019-01-22 11:04:07 · 157 阅读 · 0 评论 -
PAT Advanced1053 Path of Equal Weight(DFS,树)
链接:PAT Advanced1053Given a non-empty tree with root R, and with weight Wi assigned to each tree node Ti. The weight of a path from R to L is defined to be the sum of the weights of all the nodes...原创 2019-01-21 15:22:31 · 159 阅读 · 0 评论 -
PAT Advanced1020 Tree Traversals(二叉树)
链接:PAT Advanced1020Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversa...原创 2019-01-21 11:19:34 · 216 阅读 · 0 评论 -
PAT Advanced1056 Mice and Rice(队列,模拟)
链接:PAT Advanced1056Mice and Rice is the name of a programming contest in which each programmer must write a piece of code to control the movements of a mouse in a given map. The goal of each mouse i...原创 2019-01-17 14:42:29 · 293 阅读 · 0 评论 -
Codeup 简单计算器(栈的应用)
链接:Codeup 简单计算器题目描述读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。输入测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。输出对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。样例输入30 / 90...原创 2019-01-17 11:03:01 · 607 阅读 · 0 评论 -
UVA-548 Tree(二叉树,DFS)
只是对着刘汝佳书依葫芦画瓢,主要记录一下自己的理解、心得。题目:UVA-548题目描述:一棵二叉树,每个结点都有不同的权值(1~10000的正整数),给出了其中序遍历(第一行)和后序遍历(第二行),找到一个叶子,使得它到根的路径的权和最小,如果有多解,该叶子的本身的权值应尽量小。首先是对DFS的理解。先序遍历(根-&amp;gt;左子树-&amp;gt;右子树):ABDECF中序遍历(左子树-&amp;gt;...原创 2018-11-12 10:57:17 · 404 阅读 · 0 评论 -
UVA-12657 Boxes in a Line (模拟,双向链表(数组实现))
第一次对数组实现双向链表的练习,理解了发现数组实现真方便…题目:UVA-12657题目描述:你有n个盒子在桌子上的一条线上从左到右编号为1……n。你的任务是模拟四种操作1 X Y 移动盒子编号X到盒子编号Y的左边(如果X已经在Y的左边了就忽略)2 X Y 移动盒子编号X到盒子编号Y的右边(如果X已经在Y的右边了就忽略)3 X Y 交换盒子编号X与盒子编号Y的位置4 将整条线反转操作...原创 2018-11-05 17:26:45 · 464 阅读 · 0 评论 -
区间动态查询问题——线段树模板
一、定义线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。线段树的每一个结点都保存一条线段(即一个区间),对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。特性:时间复杂度:建...原创 2019-05-03 15:32:56 · 279 阅读 · 0 评论