![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Brute Force Kevin
这个作者很懒,什么都没留下…
展开
-
POJ3468 A Simple Problem with Integers 分块
题目链接http://poj.org/problem?id=3468分析将原序列划分成若干段长度为 ⌊n⌋\lfloor \sqrt{n} \rfloor⌊n⌋ 的区间进行维护;设 a[i]a[i]a[i] 以表示原序列每个元素, b[i]b[i]b[i] 表示每个元素所属的区间,sum[i]sum[i]sum[i] 表示每个区间的元素之和,add[i]add[i]add[i] 表示每...原创 2019-10-25 15:46:34 · 228 阅读 · 0 评论 -
洛谷P4556 雨天的尾巴 树上差分+权值线段树
题目链接https://www.luogu.org/problem/P4556分析对于树上链的操作,可以用树上差分来做;由于粮食有种类,树上每个节点建一棵权值线段树来记录答案;树上差分后要合并,用线段树合并来实现。AC代码#include <cstdio>#include <iostream>#include <algorithm>usin...原创 2019-10-25 10:42:38 · 311 阅读 · 0 评论 -
HDOJ1255 覆盖的面积 线段树
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1255分析与普通的面积并不同的是,我们要维护被覆盖了至少两次的区间,还需同时维护至少覆盖了一次的区间,后者是很容易维护的,而对于前者来说,若整个区间被至少覆盖了两次,则结果为区间长度,否则,若区间长度为 111,则结果为 000,否则,若区间被覆盖了一次,则结果为子区间被至少覆盖一次的长度...原创 2019-10-24 19:32:27 · 201 阅读 · 0 评论 -
POJ2482 Stars in Your Window 线段树
题目链接http://poj.org/problem?id=2482分析题面很感人,撩妹子的小trick;依旧是扫描线法,在此之前需要一步转化,考虑对于每颗星星,能将其覆盖的矩形右上角的轨迹所组成的矩形,显然答案变为求一块区域,使得矩形在其上覆盖产生的权值和最大,建一棵线段树支持区间加和区间查询最大值,从左往右扫描即可,注意边缘的星星不算。AC代码#include <cs...原创 2019-10-24 18:54:10 · 198 阅读 · 0 评论 -
IOI1998 Picture 线段树
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1828分析扫描线法,线段树节点同时记录区间端点是否被覆盖,区间中有几条水平线,累加答案时,注意线段会有覆盖,因此应加上变化量;根据记录的水平线数量统计上水平线长度。AC代码#include <cstdio>#include <cstdlib>#include &l...原创 2019-10-24 14:25:24 · 174 阅读 · 0 评论 -
POJ1151 Atlantis 线段树
题目链接http://poj.org/problem?id=1151分析扫描线求矩形面积并,以从左向右扫描为例,将矩形拆成 2n2n2n 条竖直线段,用线段树来维护当前有效长度,遇到某个矩形左侧的线段,则尝试增加有效长度,右侧则尝试减小有效长度;每次用有效长度乘线段间隔来累加答案。AC代码#include <cstdio>#include <algorithm&...原创 2019-10-24 11:24:06 · 111 阅读 · 0 评论 -
CH4302 Interval GCD 线段树
题目链接http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4302%20Interval%20GCD分析根据更相损减术,区间 [l,r][l, r][l,r] 的最大公约数等于 lll...原创 2019-10-23 17:51:44 · 199 阅读 · 0 评论 -
CH4301 Can you answer on these queries III 线段树
题目链接http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4301%20Can%20you%20answer%20on%20these%20queries%20III分析线段树节点记录...原创 2019-10-23 11:24:38 · 256 阅读 · 0 评论 -
POJ2182 Lost Cows 树状数组
题目链接http://poj.org/problem?id=2182分析对于第 nnn 头牛,若在其前面有 AnA_nAn 头牛比他矮,则其高度为 An+1A_n + 1An+1;在此之前的牛也类似,不过要考虑后面的牛可能已占用了某些高度;问题可以转化为对于一个长度为 nnn 的 010101 序列,每次找到第 kkk 个 111,且找到后需要将其置为 000;树状数组 +++ ...原创 2019-10-23 09:32:17 · 127 阅读 · 0 评论 -
NOI2001 食物链 扩展域并查集
题目链接http://poj.org/problem?id=1182分析由于吃与被吃关系构成了一个环,所以我们可以用扩展域并查集来维护关系;对于每种动物,建三个节点分别保存自身,能吃的与会被吃的。AC代码#include <cstdio>inline int read() { int num = 0; char c = getchar(); while (c &l...原创 2019-10-22 11:13:16 · 122 阅读 · 0 评论 -
NOI2001 食物链 带权并查集
题目链接http://poj.org/problem?id=1182分析用带权并查集来维护每种动物之间吃与被吃的关系,具体来说,每个节点指向其父亲的有向边的权值表示了这种关系,000 表示是同类,111 表示吃父亲,222 表示被父亲吃,确定某两点之间边的权值时要注意参与运算的各边的方向。AC代码#include <cstdio>inline int read() ...原创 2019-10-22 10:26:26 · 222 阅读 · 0 评论 -
POJ1733 Parity game 扩展域并查集
题目链接http://poj.org/problem?id=1733分析与程序自动分析那道题不同,a≠ba \neq ba=b,b≠cb \neq cb=c,并不意味着 a=ca = ca=c;而本题和关押罪犯类似,aaa 与 bbb 不在一间牢房,bbb 与 ccc 不在一间牢房,则 aaa 与 ccc 必在一间牢房;可以额外开一倍节点来记录不等关系,分析与带权并查集做法类似。...原创 2019-10-22 07:42:42 · 134 阅读 · 0 评论 -
POJ1733 Parity game 带权并查集
题目链接http://poj.org/problem?id=1733分析若 (l,r)(l, r)(l,r) 结果为奇数,说明前缀和 sum[r]sum[r]sum[r] 和 sum[l−1]sum[l - 1]sum[l−1] 奇偶性相反;反之则说明二者奇偶性相同;用并查集的节点表示每个位置的前缀和,维护每个节点与父亲的异或和即可。AC代码#include <cstdio&g...原创 2019-10-21 21:23:58 · 114 阅读 · 0 评论 -
NOI2002 银河英雄传说 带权并查集
题目链接http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4101%20%E9%93%B6%E6%B2%B3%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B4分析...原创 2019-10-21 20:08:24 · 409 阅读 · 0 评论 -
POJ1456 Supermarket 并查集
题目链接http://poj.org/problem?id=1456分析除了堆可以来实现贪心做法,并查集也可行;先将商品按利润不增排序,依次考虑每件商品,尽量将其放在不过期且靠后时卖出;用并查集来维护每天及此前最靠后的空闲位置,每选定一天,则将其加入到其前一天所在集合。AC代码#include <cstdio>#include <algorithm>us...原创 2019-10-21 19:16:30 · 127 阅读 · 0 评论 -
【NOI2015】程序自动分析 并查集
题目链接https://www.luogu.org/problem/P1955分析很显然可以用并查集来维护关系;先处理相等关系再处理不等关系;对于相等关系则合并,对于不等关系,若两个操作数已在同一集合则无法满足;数据范围过大需要离散化,此题不可以像关押罪犯那样用补集维护不等关系。AC代码#include <cstdio>#include <algorithm>...原创 2019-10-21 18:30:48 · 150 阅读 · 0 评论 -
POJ2259 Team Queue 模拟 队列
题目链接http://poj.org/problem?id=2259分析根据题意模拟,建一个队列表示当前有哪些团队,再给每个团队建一个队列,表示哪些成员在队伍中。AC代码#include <cstdio>#include <cstring>#include <queue>using namespace std;inline int read...原创 2019-09-06 16:18:44 · 135 阅读 · 0 评论 -
BZOJ2288 生日礼物 堆 链表 贪心
题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=2288分析显然符号相同的一段会一起被选,因此先合并符号相同的各段,最终得到正数负数相间的序列。设此时有 cntcntcnt 个正数,且其和为 sumsumsum,若 cnt≤mcnt \leq mcnt≤m,则答案为 sumsumsum。否则,每次找出绝对值最小的数,将其与序列中相...原创 2019-09-09 15:59:40 · 224 阅读 · 0 评论 -
洛谷 P3865 【模板】ST表
题目链接https://www.luogu.org/problem/P3865分析ST表使用倍增思想,一般用于解决 O(nlogn)O(nlogn)O(nlogn) 预处理,O(1)O(1)O(1) 查询的静态区间最值问题。AC代码#include <cstdio>#include <algorithm>using namespace std;inlin...原创 2019-08-26 21:40:27 · 137 阅读 · 0 评论 -
洛谷 P3384【模板】树链剖分
题目链接https://www.luogu.org/problem/P3384分析树链剖分大致是将树划分为若干条轻重边和轻重链,其中关键的是重链和轻边;每次DFS先走重儿子(所在子树点数多),对生成的DFS序建立线段树维护;该序列满足重链在其中连续,子树在其中连续;对于链的操作,将两端点不断沿着重链向上走,最终走到同一条链,然后便可完成操作;对于子树的操作,记录子树大小,直接用线段树...原创 2019-10-04 19:39:12 · 161 阅读 · 0 评论 -
操作树
例题维护一个序列,支持以下 333 种操作:在序列末尾插入元素;撤销若干次 111 和 222 操作;查询序列某个位置的数。TTT 组数据,T≤5T \leq 5T≤5,对于 nnn 次操作,n≤2×105n \leq 2 \times 10 ^ 5n≤2×105,输出 333 操作的结果。分析直接模拟,维护各个历史版本的序列,复杂度是 O(n2)O(n ^ 2)O...原创 2019-10-08 10:48:20 · 326 阅读 · 0 评论 -
洛谷 P3377 【模板】左偏树(可并堆)
题目链接https://www.luogu.org/problem/P3377分析题目要求堆支持合并操作,左偏树是一种实现方式;具体来说,除了要保证堆的根最小性质,还要保证右子树到叶子节点的最小距离不超过左子树到叶子节点的最小距离;一般来说,左偏树只需递归实现合并操作,其他操作便可轻易完成。AC代码#include <cstdio>#include <iostr...原创 2019-10-11 19:11:33 · 269 阅读 · 0 评论 -
POJ1442 Black Box 堆
题目链接http://poj.org/problem?id=1442分析建一个大根堆保存当前序列前 k−1k - 1k−1 小的元素,建一个小根堆保存剩余元素。每次插入到小根堆,若小根堆堆顶小于大根堆堆顶,则交换两堆堆顶。每次输出大根堆堆顶,并将堆顶取出放入小根堆,以此维护小根堆的大小。AC代码#include <cstdio>#include <vector&g...原创 2019-09-09 14:45:25 · 123 阅读 · 0 评论 -
POJ3630 Phone List Trie树
题目链接http://poj.org/problem?id=3630分析Trie树,插入时可顺便检查是否经过了终止节点,另外插入完当前字符串后还要检查其终止节点是否有儿子,可能当前字符串是之前某个字符串的前缀。AC代码#include <cstdio>#include <cstring>inline int read() { int num = 0; c...原创 2019-09-09 14:15:35 · 119 阅读 · 0 评论 -
POJ1193 内存分配 模拟
题目链接http://poj.org/problem?id=1193分析模拟,可以用动态数组vector模拟内存情况,用队列queue模拟等待队列。AC代码#include <cstdio>#include <algorithm>#include <vector>#include <queue>using namespace st...原创 2019-09-09 06:44:25 · 144 阅读 · 0 评论 -
CH1602 The XOR Largest Pair Trie树
题目链接http://noi-test.zzstep.com/contest/0x10%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E4%BE%8B%E9%A2%98/1602%20The%20XOR%20Largest%20Pair分析将每个整数对应的二进制串建成Trie树,在插入一个数前,...原创 2019-09-07 19:52:27 · 102 阅读 · 0 评论 -
前缀统计
题目链接http://noi-test.zzstep.com/contest/0x10%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E4%BE%8B%E9%A2%98/1601%20%E5%89%8D%E7%BC%80%E7%BB%9F%E8%AE%A1分析Trie树模板题,设 cnt[i]c...原创 2019-09-07 19:17:56 · 270 阅读 · 0 评论 -
Running Median 链表实现
题目链接http://poj.org/problem?id=3784分析离线做法,先将整个序列读入,由此得到链表,且链表元素有序,可知中位数及其位置。倒序扫描原序列,依次从链表中删除对应元素。每次删除,讨论链表长度的奇偶性以及中位数和要删除元素的位置关系,可更新中位数位置。应用了链表可以 O(1)O(1)O(1) 删除元素的性质。AC代码#include <cstdio>...原创 2019-09-07 07:35:17 · 202 阅读 · 0 评论 -
CH1301 邻值查找 链表
题目链接http://noi-test.zzstep.com/contest/0x10%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E4%BE%8B%E9%A2%98/1301%20%E9%82%BB%E5%80%BC%E6%9F%A5%E6%89%BE分析借助链表实现,通过原数组建立链表,满...原创 2019-09-07 06:30:10 · 248 阅读 · 0 评论 -
CH1201 最大子序和 单调队列
题目链接http://noi-test.zzstep.com/contest/0x10%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E4%BE%8B%E9%A2%98/1201%20%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C分析滑动窗口模板,注意...原创 2019-09-06 17:49:21 · 228 阅读 · 0 评论 -
POJ2559 Largest Rectangle in a Histogram 单调栈
题目链接http://poj.org/problem?id=2559分析单调栈,时刻保证栈内元素单调。依次扫描每个矩形,若栈空或当前矩形高度不小于栈顶矩形,则直接将该长度为 111 的矩形入栈;若当前矩形高度小于栈顶矩形,则不断弹出栈顶,直至栈空或当前矩形高度不小于栈顶矩形;每次新弹出的栈顶矩形一定不比之前弹出的矩形高,因此累加已弹出矩形的长度,再乘以新弹出矩形的高度即可更新答案;弹...原创 2019-09-06 15:54:13 · 92 阅读 · 0 评论 -
中缀表达式求值
摘自李煜东著《算法竞赛进阶指南》一、将中缀表达式转为后缀表达式,从左往右扫描,借助栈 O(n)O(n)O(n) 实现:遇到数直接输出。遇到左括号入栈;遇到右括号则不断弹出栈顶,直到弹出一个左括号。遇到运算符,若栈空或栈顶为左括号,则直接入栈;除非该运算符优先级小于栈顶运算符,否则不断弹出栈顶,直至栈空或栈顶为左括号或该运算符优先级小于栈顶运算符。二、后缀表达式求值,从左往...原创 2019-09-06 15:03:57 · 931 阅读 · 0 评论 -
CH1101 火车进栈 模拟 栈
题目链接http://noi-test.zzstep.com/contest/0x10%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E4%BE%8B%E9%A2%98/1101%20%E7%81%AB%E8%BD%A6%E8%BF%9B%E6%A0%88分析每次考虑出栈还是入栈,回溯记得还原现...原创 2019-09-06 11:49:49 · 440 阅读 · 0 评论 -
HDOJ4699 Editor 栈
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4699分析对顶栈,注意最大前缀和可能为负数。AC代码#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using namespace std;...原创 2019-09-06 11:33:10 · 145 阅读 · 0 评论 -
POJ3764 The xor-longest Path Trie树
题目链接http://poj.org/problem?id=3764分析预处理出每个点到根路径上边权异或和,两点间边权异或和可由两点分别到根的异或和再异或得到。可以用二进制Trie找到最大的两点间边权异或和。注意,Trie的空间一定要开够。AC代码#include <cstdio>#include <cstring>#include <algorit...原创 2019-09-07 20:42:02 · 106 阅读 · 0 评论 -
洛谷 P3378 【模板】堆
题目链接https://www.luogu.org/problem/P3378分析堆模板,手写结构体感觉不错;移动元素位置后返回该元素最终位置,在Dijkstra算法中可支持动态修改堆中元素。AC代码#include <cstdio>#include <cstring>#include <iostream>using namespace std...原创 2019-09-08 06:50:40 · 138 阅读 · 0 评论 -
POJ2823 Sliding Window 单调队列
题目链接http://poj.org/problem?id=2823分析单调队列模板,在从队尾出队时,可以用二分快速找到最终位置,但效果并不明显。AC代码#include <cstdio>inline int read() { int num = 0, flag = 1; char c = getchar(); while (c < '0' || c >...原创 2019-09-08 19:27:21 · 176 阅读 · 0 评论 -
POJ1964 City Game 单调栈
题目链接http://poj.org/problem?id=1964分析枚举每一行,求出该行每个节点向上的最大高度,单调栈求以该行为底线的最大矩阵面积。AC代码#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using namespace...原创 2019-09-08 18:01:07 · 183 阅读 · 0 评论 -
CH1802 表达式计算4 栈
题目链接http://noi-test.zzstep.com/contest/0x18%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E7%BB%83%E4%B9%A0/1802%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%AE%A1%E7%AE%974分析中缀表达式求值有...原创 2019-09-08 17:13:23 · 338 阅读 · 0 评论 -
CH1801 括号画家 栈
题目链接http://noi-test.zzstep.com/contest/0x18%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E7%BB%83%E4%B9%A0/1801%20%E6%8B%AC%E5%8F%B7%E7%94%BB%E5%AE%B6分析读入左括号则入栈,读入右括号则检查栈...原创 2019-09-08 15:09:23 · 440 阅读 · 0 评论