数据结构
文章平均质量分 71
hnust_W_unc_h
这个作者很懒,什么都没留下…
展开
-
BZOJ2648 SJY摆棋子(k-d树)
###题目链接思路:$\ \ \ \ 二维的二维的二维的k-d树,查询的时候其实就是贪心搜索+剪枝,树,查询的时候其实就是贪心搜索+剪枝,树,查询的时候其实就是贪心搜索+剪枝,k-d树的建树和查询网上很多,插入的时候就是暴力插入。可为啥我的暴力插入超时了,话说应该要像替罪羊树那样维护树的建树和查询网上很多,插入的时候就是暴力插入。可为啥我的暴力插入超时了,话说应该要像替罪羊树那样维护树的建树和...原创 2018-10-08 19:03:22 · 411 阅读 · 0 评论 -
HDU 5306 (线段树维护区间最值)
题意: \ \ \ \ 一个nnn个数的数组,mmm次操作,操作分三种: 1 x y v:1 x y v:1\ x\ y \ v:对于i∈[x,y],ai=min(ai,val)i∈[x,y],ai=min(ai,val)i \in [x,原创 2018-05-08 20:20:38 · 574 阅读 · 0 评论 -
UOJ126【NOI2013】快餐店(基环树dp)
题目链接 思路: \ \ \ \ \ 现在图中保证一定只有一个环,这个基环树,也就是说去掉环上的任意一条边,它能形成一棵树,先看最长路径不在环上的情况,那么最长路径就是在环上的点为根的子树中了,这个求下树的直径即可。看在环上的,如果最长路径在环上,最长路径一定有一条环上的边没...原创 2018-04-19 21:07:01 · 224 阅读 · 0 评论 -
EOJ3534 笋尖爆炸(线段树+斐波那契数列性质)
思路: \ \ \ \ 因为斐波那契序列具有可加性, 可以对每个区间记录是以哪两项作为斐波那契序列前两项的值,延迟标记一下,对于x,yx,yx,y的路径上更新值u,vu,vu, v的时候,xx x位置单独加u,x+1u,x+1u,x + 1位置单独加vvv,然后[x+2,y][x+2,y][x +...原创 2018-04-13 10:04:10 · 487 阅读 · 0 评论 -
“今日头条杯”首届湖北省大学程序设计竞赛 Avengers: Infinite War(CDQ分治+并查集)
J - Avengers: Infinite War题意: \ \ \ \ nnn个节点mmm个操作,操作分四种:1 x y:1 x y:1\ x\ y : 在(x,y)(x,y)(x, y)节点连接一条边2 x y:2&n原创 2018-04-22 22:06:47 · 236 阅读 · 0 评论 -
AtCoder Regular Contest 093(E-Bichrome Spanning Tree)
题意: \ \ \ \ \ 给出一个NNN个点MMM条边的无向图,现在要给一些边染黑色或者白色,现在从这些边中选出一些边生成若干棵生成树,要求这些生成树至少包含一条白色的边和一条黑色的边,而且这些生成树的最小值是XXX,问有多少种染色方法。思路: ...原创 2018-03-27 18:47:28 · 586 阅读 · 1 评论 -
第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 B-跳一跳,很简单的(字符串哈希)
思路: \ \ \ \ \ 首先知道一个节点的值经过262626秒之后肯定是到回原来的值去了,那就可以建立262626棵树, 每棵树对应每个时间的状态,然后对每一棵树进行处理,因为比较从uuu到根节点和从vvv到根节点的字典序只需要从左往右找到第一个不同的位置进行比较就行了,可...原创 2018-03-26 19:22:53 · 216 阅读 · 0 评论 -
HDU5398 GCD Tree(动态树)
/**题意:n个点,标号1~n,现在要生成一棵树,使树的总权值最大,相邻两个点若连了边,那么其权值就是两个节点的最大公约数思路:考虑前i个点已经生成最大生成树,第i+1个点加进去,如果i + 1是素数,那么和1连边,否则至少要和它的最大因子(不是i+1)连边,这是由贪心思想来的,k个点的所有数的最大公约数有,k/2, k/2-1, k/2-2....1,然后把k/2的倍数依次加边,所以i+...原创 2018-03-21 12:55:19 · 466 阅读 · 0 评论 -
BZOJ2286 [Sdoi2011]消耗战 (虚树 + 树形DP)
思路:如果是一组询问,很明显可以树形dpdpdp,假设以uuu为根的子树要断开所有关键点的路径所需要的最小花费, 可以找到状态转移方程: \ \ \ \ \ \ dp[u]=∑{min_cost(u,son),son是关键点min(min_cost(...原创 2018-03-30 17:14:51 · 251 阅读 · 0 评论 -
团体程序设计天梯赛 森森快递(线段树 + 贪心)
/**因为一个区间[l, r]的最大货运量就是min([l, r]), 对于两个区间[l, r], [L, R] 假设(r <= R)1. 两个区间完全不相交, 则最大货运量就是min([l, r]) + min([L, R]),谁先取谁后取都是一样2.[l, r]完全包含于[L, R],那么肯定选择[l, r]且取其最大货运量,因为min[l, r] >= min[L, R]...原创 2018-03-14 12:40:16 · 1115 阅读 · 0 评论 -
HDU 5381 The sum of gcd (莫队 + 二分 + 区间GCD特性)
/**题意:....思路: 固定一个端点(值为k),那么这个端点属于的所有区间的不同的gcd最多只有logk中,因为gcd 整除 k, 从大到小排序去重后后一个数至少除以2,所以不同的GCD最多只有logk个,那么找出这个端点往左和往右当GCD为g时能扩展到多远,这个二分即可,区间的gcd用ST表预处理出来,之后找出关系式后莫队算法就可以了*/#include<bits/s...原创 2018-03-14 10:32:48 · 233 阅读 · 0 评论 -
BZOJ 1040 [ZJOI2008]骑士(基环树dp)
思路: \ \ \ \ \ 这是基环树的入门题,因为nnn个骑士每个骑士有一个讨厌的骑士, 那么讨厌的骑士之间连接一条边,很显然选出的骑士之间不能有边存在,如果这是一棵树的话可以树形dpdpdp: &原创 2018-03-29 18:53:21 · 262 阅读 · 0 评论 -
HDU 5327 Segment Game(树状数组)
题意: 每次插入一个线段,第i个插入操作线段长度为i,或删除一个已存在的线段,每次插入后输出当前插入的线段能完整覆盖存在的几条线段。思路: 因为每次的插入操作是递增的,假设第i次的插入线段为[L, R],那么已知的线段左端点l >= L的个数,一定是所有l >= L,r >= L的线段数量,计算r > R的数量之后,这些线段一定是与l >= L的端点形成的, 因为插入...原创 2018-03-04 19:41:33 · 246 阅读 · 0 评论 -
HDU5390 Tree(线段树 + Trie)
/**题意:一棵N个节点的有根树,一开始每个节点都有一个权值,有m个操作:1 x : 查询x到根节点的路径上,max{val[x] ^ val[v]},v是x到根节点上路径上的点0 x y: 将节点x的权值改为y,即val[x] = y思路:查询x到根节点的路径上的点的影响,可以转换为每次修改一个点给这个点的子树中每个点都影响,这样跑出dfs序列后,修改一个点的影响用线段树维护就行了,...原创 2018-03-16 13:51:12 · 496 阅读 · 0 评论 -
HDU5357 Easy Sequence (栈的应用)
/**E - Easy Sequence题意:给出一个左右括号序列,设ANSi是第i个括号所在的有效括号对的数量,有效括号对指的是(),()(),(())这样的形式要求 sum { ANSi * i % mod | 1 <= i <= n }, 注意是求每个i先取模之后的和,不是所有和取模思路:一开始看成是求出所有和再取模,直接求贡献去了然后WA,首先如果一个左括号是在一个...原创 2018-02-23 11:53:25 · 240 阅读 · 0 评论 -
Wannafly挑战赛14 前缀查询(Splay)
题目链接思路: \ \ \ \ \ \ 一时卡了忘记字典树了, 写了一大片的splaysplaysplay,还调试了老久, splaysplaysplay直接加个懒惰标记就行了, 就是和线段树一样,对于前缀为sisis_i的变化和查询,我们可以找出这...原创 2018-04-21 10:04:55 · 222 阅读 · 0 评论 -
UOJ58 糖果公园(树上带修改莫队)
思路: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\ \ \ \ 网上题解都很多。。。 学习树上带修改莫队的蒟蒻一只。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&原创 2018-05-10 15:45:43 · 254 阅读 · 0 评论 -
CodeForces 438D (线段树)
题目链接题意: \ \ \ \ 三种操作: 1 l r:1 l r:1\ l\ r: 求∑ri=lai∑i=lrai\sum_{i=l}^{r} a_i 2 l r x:2 l 原创 2018-06-25 20:29:10 · 304 阅读 · 0 评论 -
hihocoder1282 Rikka with Sequence III(最值线段树)
链接思路: \ \ \ \ 2016年论文题目,就是记录每个节点的最大值,次大值,最小值,次小值,在更新的时候,和优先更新即可,然后看左右孩子是否有当前节点的最大值最小值,如果有的话在传给孩子当前节点的更新信息。#include<bits/stdc++.h>typedef l...原创 2018-06-25 19:31:07 · 245 阅读 · 0 评论 -
UOJ#169 元旦老人与数列(线段树)
题目链接思路: \ \ \ \ 16年的论文题,这里没有办法再用标记来做了, 但是除了历史最值之外都可以利用论文前面提到的方法来做,所以对于历史最值用那个方法额外再维护一下历史最值即可。push_downpush_downpush\_down的时候,当前的记录的历史最值只能传给有最小值的孩子,没有...原创 2018-06-29 21:01:54 · 437 阅读 · 0 评论 -
UOJ#164 V(线段树)
题目链接思路: \ \ \ \ 16年的论文题,主要是标记的作用:记(a,b)(a,b)(a,b)为区间所有的数加上aaa再对bbb取maxmax\max。那么标记(a,b)(a,b)(a, b)和标记(c,d)(c,d)(c,d)是可以合并的:(a+c,max(b+c,d))(a+c,max(b...原创 2018-06-29 18:45:15 · 413 阅读 · 0 评论 -
Avito Code Challenge 2018 G. Magic multisets(线段树)
题目链接题意: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\ \ \ \ 维护一个多重集合,两种操作: 1 给区间[l,r][l,r][l, r]的多重集合添加一个数xxx,如果有集合里面已经存在xxx,那么该集合里面的所有元素翻倍,否则插入该元素。 2原创 2018-06-16 19:45:30 · 249 阅读 · 0 评论 -
BZOJ1798 [Ahoi2009]Seq 维护序列seq (线段树维护区间加法减法)
题目链接思路: \ \ \ \ 线段树维护区间加法乘法,可以维护这样的形式:a⋅x+ba⋅x+ba \cdot x+b,假如当前位置的和表示形式是a⋅sum+ba⋅sum+ba \cdot sum + b,当一个区间乘以ddd的时候,形式变成了d⋅(a⋅sum+b)=(a⋅d)⋅sum+(d⋅b)...原创 2018-06-16 16:56:46 · 202 阅读 · 0 评论 -
BZOJ1101 [POI2007]Zap
题目链接思路: \ \ \ \ 论文题,首先可以筛选出[1,a],[1,b][1,a],[1,b][1, a], [1, b]以内gcdgcdgcd是ddd的倍数的个数x⋅y(x=⌊ad⌋,y=⌊bd⌋)x⋅y(x=⌊ad⌋,y=⌊bd⌋)x \cdot y(x = \lfloor \frac{a...原创 2018-06-12 18:26:26 · 230 阅读 · 0 评论 -
CodeChef Chef and Churu(分块)
题目链接题意: \ \ \ \ \ \ nnn个数mmm个操作,操作分两种: 1 x y:1 x y:1\ \原创 2018-05-16 18:54:59 · 494 阅读 · 0 评论 -
BZOJ2002 弹飞绵羊(分块)
链接思路: \ \ \ \ \ \ LCTLCTLCT可以解决, 但是分块的编码速度更快,先预处理出每个位置跳出当前块需要多少步,然后对于每个查询,直接遍历跳出每一块的步数,对于每个修改,暴力更新那个位置所属的块的所有位置信息,时间复杂度都是O(nn...原创 2018-05-15 15:55:25 · 194 阅读 · 0 评论 -
CodeChef Children and trips (分块)
题意: \ \ \ \ 一棵nnn个节点没条边权值是111或者222的树,有mmm个查询,每次给出(x,y,z)(x,y,z)(x,y,z),问每次跳跃步数不超过zzz的情况下,最少跳几次能从xxx跳到yyy。 思路: &a原创 2018-05-20 12:11:20 · 492 阅读 · 1 评论 -
CodeChef Chef and Problems(分块)
链接题意: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\ \ \ \ nnn个数kkk个查询,每次查询在[l,r][l,r][l,r]中满足ai=aj时j−iai=aj时j−ia_i=a_j时j-i的最大值。 思路: &amp;nbsp;原创 2018-05-17 19:47:17 · 365 阅读 · 0 评论 -
BZOJ3224 Tyvj 1728 普通平衡树 (替罪羊树)
题目链接思路: \ \ \ \ \ \ 学习一下替罪羊树。 替罪羊树就是确定一个αα\alpha因子,插入和常规平衡树插入无太大区别, 删除的时候节点还在, 只是做个标记已经删除过,然后查找和普通平衡树也没太大区别, 构建的时候当当前节点xxx的子树...原创 2018-05-10 22:57:11 · 279 阅读 · 0 评论 -
SPOJCOT2 Count on a tree II (树上无修改莫队)
题目链接题意: \ \ \ \ \ \ 一棵nnn个节点的数,每个节点有一个权值,回答MMM次询问,每次询问给你一对(u,v)(u,v)(u, v),问uuu到vvv的简单路径上不同点权的数目。 思路: &nbs原创 2018-05-10 19:33:03 · 197 阅读 · 0 评论 -
UVA11922 Permutation Transformer(Spaly / Treap)
题源题意: \ \ \ \ 111到nnn的序列,每次操作给出[l,r][l,r][l,r],对[l,r][l,r][l, r]的元素反转后加到序列末尾,输出最终序列。 思路: \原创 2018-05-03 21:11:47 · 257 阅读 · 0 评论 -
HDU5380 Travel with candy(单调队列 + 贪心)
/**题意: 有n+1个城市一直线上,现在从0号城市按顺序走到n号城市,从0号城市到i号城市没走一个单位距离需要消耗ai个糖果,每个城市都可以买/卖糖果,价格分别是buyi和selli,selli<buyi。身上最多只能带C个糖果,在起点0号城市身上没有糖果,问到达n号城市的最小花费。思路:考虑当前点, 每次将当前点的糖果补满,补满之前考虑之前剩余的糖果:1. 上一个点...原创 2018-03-15 10:29:30 · 268 阅读 · 0 评论 -
SPOJ1825 Free tour II (树分治)
/**题意:N个节点的树,有M个节点是黑色,其余节点是白色,每条边有权值,要求找出一条路径,使得这条路径上黑色节点数量在不超过K个的条件下长度最长思路:设dp[x][k]:以x为根节点的且x为端点的所有路径上黑色节点数不超过k个时的最大长度,那么经过x的长度为l的链的最大长度为dp[x][k] + dp[x][l - k](状态值需属于不同的子树),但是这样复杂度太高,考虑树分治,只有l...原创 2018-02-19 01:16:48 · 232 阅读 · 0 评论 -
BZOJ3110 K大数查询
/**思路:CDQ分治 + 整体二分,就是对整体的答案二分,对于所有答案落在[L, R]的查询,对[L, mid]的操作更新,然后将当前的查询分为答案比mid小的S1部分和答案比mid大的S2部分,递归处理[L, mid, S1]和[mid + 1, R, S2]**/#include<bits/stdc++.h>typedef long long ll;const ll ...原创 2018-02-11 22:14:28 · 241 阅读 · 0 评论 -
Ural 1416 Confidential(最小生成树+次小生成树)
题意:给n个点m条边,求它的最小生成树和次小生成树的权值分别是多少。思路:先求最小生成树,并查集即可,求出来之后求次小生成树,次小生成树一定是在最小生成树的基础上添加一条边在之后形成的环中删除除了加入的边中的最大的一条边,然后枚举所有未添加的边。求两点之间路径上的最大权的边,可以预处理出LCA,然后查询log n,就可以了。#include#include#includ原创 2017-02-22 13:31:33 · 357 阅读 · 0 评论 -
POJ 3237 Tree (树链剖分)
题意:有一棵n个节点的树,现有以下三种操作:1、修改第i条边的权值2、将a到b的路径的权值取反3、查询a到b路径上的最大权值思路:典型的树链剖分,路径上的权值用线段树维护,用lazy标记,判断某个区间取反的次数,写个线段树的模板错了大半天,无语......#include#include#include#includeconst int maxn = 1e5原创 2017-02-28 22:23:23 · 216 阅读 · 0 评论 -
POJ 2796 feel good(单调栈)
题意:给一个序列A, 求一段区间L, R,使得sum[L, R] * min[L, R]最大思路:因为A数组的数据都是非负的,则sum[0, i]肯定是单调递增的,枚举以第i个数为min[L, R],即求出以A[i]为最小的数的时候,区间最长能扩至多长,以一个单调栈来维护,可以求出最左最右能延伸至哪里#include#include#include#includet原创 2017-01-09 13:57:26 · 195 阅读 · 0 评论 -
Uva 11990 "Dynamic" Inversion(树状数组 + 数据结构分块)
题意:给一个1 ~ n的排列,有m次删除操作,问每次删除前该序列有多少逆序对思路:预处理原来总共有多少逆序对,树状数组即可,求出以每个数为逆序对有多少个,删除的时候,先用剩余的逆序对数减去以该数形成的逆序对数,然后看删除的数有多少与该数形成逆序对,再加回去,可以使用分块的方法,快速查询有多少删除的数与其形成逆序对,每次删除的数加在一个新数组上,对新数组分块查找就行了#inc原创 2016-12-17 18:11:27 · 325 阅读 · 0 评论 -
Uva 12003 Array Transformation(分块查找)
题意:给出n(1思路:lrj训练指南的一种叫分块查找的数据结构,把每个块分成大概O(sqrt(n))个元素,编码简单又快#include#include#includeconst int maxn = 3 * 1e5 + 10;const int sz = 4096;using namespace std;int A[maxn], block[maxn / s原创 2016-12-17 16:49:08 · 339 阅读 · 0 评论 -
Uva 11297 Census(线段树)
题意:给一个n*n的矩阵,给出q个操作,操作有两种,一种是查询 矩阵内x1 思路:二维线段树的模板题#include#include#include#include#includeconst int INF = 1 << 30;const int maxn = 2010;using namespace std;int Max[maxn][maxn], Mi原创 2016-12-17 15:29:08 · 314 阅读 · 0 评论