08 2018 档案

摘要:所谓树链剖分就是把树上的路径转化为连续的区间从而用各种数据结构解决树上的问题。 而转化为区间则是利用其重链的性质把一条树上的路径变成很多连续的重链从而加速找两点的lca。 并在节点向上跳的过程中对区间用数据结构做更新操作,或是将连续的重链保存做离线操作。 常见的树链剖分有更新链或子树的权值并求其权值 阅读全文
posted @ 2018-08-31 22:03 LMissher 阅读(309) 评论(0) 推荐(0)
摘要:给n个数字与q次询问,每次询问找出区间不同数字的个数并输出在这个区间里第"(个数+1)/2"次出现的数字。每个数字只有第一次出现会被计数。 考虑主席树对区间不同个数的统计是基于重复的数字只保留最后出现的那次也就是说我们可以找到从后往前数字第一次出现的计数。 但现在要求的是从前向后,考虑从后向前建立主 阅读全文
posted @ 2018-08-31 21:34 LMissher 阅读(195) 评论(0) 推荐(0)
摘要:主席树求区间不同数字个数模板题。 求不同个数就是把数组下标建一颗主席树,如果当前数字已经在前面出现过,那么在当前线段树里把之前出现的区间-1,然后把现在出现的区间+1。 -1是因为当前点和重复数字出现的区间所组成的区间答案要减1,+1相当于现在出现了一个新的数字。 查询的时候查询第R颗线段树的出现L 阅读全文
posted @ 2018-08-31 16:29 LMissher 阅读(179) 评论(0) 推荐(0)
摘要:题目是一个n个点的数,q次询问,每次询问回答一条路径上第k小数。 在树上建主席树,每个点的状态可以从父亲节点得到。 求答案时答案由路径两个端点的权值线段树之和减去lca和lca父亲节点的权值线段树之和。 因为两个端点的权值线段树之和会多算一次跟节点到lca路径上出现的权值以及根节点到lca父亲节点路 阅读全文
posted @ 2018-08-31 14:46 LMissher 阅读(171) 评论(0) 推荐(0)
摘要:主席树求区间小于某个数的数的个数模板(静态) #include <bits/stdc++.h> using namespace std; const int M = 1e5+7; int _,n,q,a[M],ls[M],tot,sz,pos,cas=1; int L[20*M],R[20*M],T 阅读全文
posted @ 2018-08-31 13:21 LMissher 阅读(126) 评论(0) 推荐(0)
摘要:模板 #include <bits/stdc++.h> using namespace std; const int M = 1e5+7; int _,n,q,a[M],ls[M]; int L[M*20],R[M*20],num[M*20],T[M],tot,pos;//L每个节点的左子树,R每个 阅读全文
posted @ 2018-08-31 10:09 LMissher 阅读(144) 评论(0) 推荐(0)
摘要:SPFA求负环模板(dfs无情被卡掉,老老实实用bfs比较好) #include <bits/stdc++.h> #define mem(x) memset(x,0,sizeof(x)) #define mem1(x) memset(x,-1,sizeof(x)) using namespace s 阅读全文
posted @ 2018-08-30 22:05 LMissher 阅读(157) 评论(0) 推荐(0)
摘要:给一个有向图,奶牛每次从图中任意一个点出发回到该点(至少经过两个点)。问sigma(点权)/sigma(边权)的最大值可以是多少。 首先从起点出发回到起点所经过的路程肯定是一个环。设最大值为ans。那么sigma(点权)/sigma(边权)=ans。 稍微化简上式子可以得到sigma(边权)*ans 阅读全文
posted @ 2018-08-30 20:54 LMissher 阅读(169) 评论(0) 推荐(0)
摘要:权值线段树求第k小。 题意给n个数所有前缀中的逆序对数,构造出原序列。 第i个前缀减去第i-1个前缀就是第i个值插入序列后增加的逆序对,也就是说前面有这么多数比当前数大。那么i减去这个数代表当前数是前i个数的区间第k小。 维护一个权值线段树,初始节点权值分别为1...n。 从后向前考虑,每遇到一个数 阅读全文
posted @ 2018-08-30 10:54 LMissher 阅读(136) 评论(0) 推荐(0)
摘要:权值线段树求逆序对,题目依次把首数字移向尾部问最小逆序对。移动的时候查询更新一下就好。 #include <bits/stdc++.h> #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 using namespace std; const 阅读全文
posted @ 2018-08-30 10:02 LMissher 阅读(131) 评论(0) 推荐(0)
摘要:给一幅图,求乘积最短的路径。 把乘积取对数就能变成普通的最短路。 #include <bits/stdc++.h> using namespace std; const int M = 1e6+7; const double inf = 2147483647; const int mod = 998 阅读全文
posted @ 2018-08-29 15:38 LMissher 阅读(203) 评论(0) 推荐(0)
摘要:题意给一个图,问从1节点出发到所有i节点的最短路有多少条,边权都为1。 维护一个ans,如果dis[v]>dis[u]+1,那么ans[v]=ans[u]并更新距离。如果dis[v]==dis[u]+1,那么ans[v]+=ans[u]。 #include <bits/stdc++.h> #defi 阅读全文
posted @ 2018-08-29 15:37 LMissher 阅读(217) 评论(0) 推荐(0)
摘要:给一颗树,给q次询问,每次询问给一条路径x到y并且给这条路染色v。 问最后每个点分别被哪种颜色染色的最多。 首先考虑在直线上的这种问题,我们可以把每次染色的区间左端点和右端点记录下来。然后建一颗颜色的权值线段树。 每次到左端点的时候把权值线段树的颜色++,到右端点+1的时候把颜色--。类似差分。然后 阅读全文
posted @ 2018-08-29 14:34 LMissher 阅读(132) 评论(0) 推荐(0)
摘要:有n个节点的树,有q次操作,每次操作选择一条路径问从起点出发到终点可以在任意点花vi买入一个商品并在之后任意一点以vj卖掉。 问最大收益是多少,并在每次操作后将那条路径所有点权加上v。 树链剖分将问题变为直线上的问题后,考虑用线段树维护一个最大值与最小值,以及从直线左到右的最大收益以及直线右到左的最 阅读全文
posted @ 2018-08-29 14:33 LMissher 阅读(164) 评论(0) 推荐(0)
摘要:题意是有n个没有安装的软件包形成一个树形结构,安装一个软件包必须把它的所有祖先一起安装,卸载一个软件包必须把它的所有子孙一起卸载。 q次操作,每次可能安装一个节点也可能卸载一个节点,问每次操作会改变多少个节点的状态。 安装是对链操作,卸载是对子树操作。线段树维护区间内的安装数量与未安装数量,更新的时 阅读全文
posted @ 2018-08-29 14:32 LMissher 阅读(290) 评论(0) 推荐(0)
摘要:记录一波Hadoop的各种操作,其实感觉就和Linux的命令一样。 "/"为Hadoop的根目录。 Hadoop fs -ls -R / ls:列出文件夹下的文件。-R:递归查找并列出。 Hadoop fs -mkdir -p /*** mkdir:创建文件夹。-p:创建多级文件夹。 Hadoop 阅读全文
posted @ 2018-08-29 09:52 LMissher 阅读(206) 评论(0) 推荐(0)
摘要:题意给你q次询问,给一条链问从给定起点到给定终点的最长连续严格递增子序列。 因为给定起点与终点所以路径可能与dfs序的树节点展开顺序相反。所以问题变成了给n个数询问一个区间的最长LCIS。 但因为方向可正可负,所以我们除了维护区间的最长递增以外还要维护最长递减。线段树的部分就做完了。 树链剖分的时候 阅读全文
posted @ 2018-08-28 23:21 LMissher 阅读(214) 评论(0) 推荐(0)
摘要:给n个数,有两个操作,第一个操作单点更新,第二个操作询问区间的最长严格连续递增子序列 因为是连续,所以线段树区间合并的时候答案只可能是两个子区间的答案或者合并后的中间拼接的最大值。 维护五个量,lnum区间左端点的值,rnum区间右端点的值,llen区间从左端点起的最长LCIS,rlen区间从右端点 阅读全文
posted @ 2018-08-28 11:27 LMissher 阅读(135) 评论(0) 推荐(0)
摘要:给一棵边权树,再给三个操作。第一个把一条边权改为v,第二个将一条链的值取反,第三个求一条链的最大值。 考虑用线段树维护连续区间的最大最小值。区间取反打lazy标记,如果lazy是奇数就取反再把最大最小值交换下放,否则不管,单点更新和区间查询很简单。 最后用树剖更新区间。把边权映射到点权即可。 #in 阅读全文
posted @ 2018-08-27 21:58 LMissher 阅读(149) 评论(0) 推荐(0)
摘要:和poj2763一样 #include <cstdio> #include <cstring> #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 using namespace std; const int M = 5e4+7; typede 阅读全文
posted @ 2018-08-27 17:01 LMissher 阅读(136) 评论(0) 推荐(0)
摘要:树链剖分模板题(处理边权) 注意把边权归到点上,在查询的时候注意不要lca点的权值,另外线段树注意如果当两个点在同一条重链且都在lca点时,直接返回。 树状数组最后计算链时不用归到重儿子上,直接减就好。 segment_tree: #include <cstdio> #include <cstrin 阅读全文
posted @ 2018-08-27 16:33 LMissher 阅读(155) 评论(0) 推荐(0)
摘要:树链剖分模板题。更新一条链的值以及求一个点的值。 可以用线段树或树状数组来区间更新加单点查询。 #include <bits/stdc++.h> #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 using namespace std; co 阅读全文
posted @ 2018-08-27 13:04 LMissher 阅读(167) 评论(0) 推荐(0)
摘要:树链剖分模板题。更新一条链的值以及求一条链的值。 熟练剖分就是把树剖成重链与轻链,然后利用重链的性质快速的把要更新的两个节点间的路径快速进行更新,也就是快速找到lca。进行更新或查询。 #include <bits/stdc++.h> #define Lson l,mid,rt<<1 #define 阅读全文
posted @ 2018-08-27 10:57 LMissher 阅读(165) 评论(0) 推荐(0)
摘要:给一颗有根树,每个节点有一个字母,给m次询问,每次询问在i节点的子树下离根节点距离为d的所有节点的字母是否可以组合为回文串。 特别的,如果i节点下没有深度为d的节点都输出Yes。 我们统计每个节点下的子树所有深度的字母。用一个数组表示每个深度的26种字母。每次询问遍历26种字母如果总字母是奇数个且有 阅读全文
posted @ 2018-08-27 09:42 LMissher 阅读(213) 评论(0) 推荐(0)
摘要:题意就是给一颗有根树再给m个询问,每个询问需要回答第i个节点的子树下有多少个出现k次的数字。 考虑启发式合并,当加入一个节点时如果加入之前是k次那么加入之后答案-1,如果加入后刚好是k次,那么答案+1。 删除操作同理。 #include <bits/stdc++.h> using namespace 阅读全文
posted @ 2018-08-27 09:36 LMissher 阅读(112) 评论(0) 推荐(0)
摘要:给定一棵n个点的有根树,1为根节点,每个点有一个点权。询问每个点的子树下任意两个数字的gcd最大是多少。 我们可以先把1e5以内所有数字的因数求出来。因为1e5以内数字的因数不超过200个。所以可以暴力做些事情。 树上启发式合并,将重儿子的所有节点的权值以及权值的因子保存下来,然后依次合并轻儿子。 阅读全文
posted @ 2018-08-26 18:03 LMissher 阅读(204) 评论(0) 推荐(0)
摘要:给一颗n个节点的树,每个节点上有一个颜色值,1为根节点。有m次询问,每次询问以vj为顶点的子树下颜色数量超过kj个的颜色总共有多少种。 考虑树上启发式合并。 首先将询问保存。每次加入新的节点的时候会把这个节点的颜色值+1,考虑我们把这个节点的颜色值的数量在树状数组中减去1,然后这个颜色值数量+1,在 阅读全文
posted @ 2018-08-26 17:48 LMissher 阅读(188) 评论(0) 推荐(0)
摘要:给定一棵n个节点的树,每个节点有个权值,1为根节点。把任意节点为根的子树中权值出现次数最多的权值称为占领这个节点的权值。 然而次数最多的权值可能有多个,要求每个节点的占领这个节点所有权值的和。 每个子树上的答案互不相关,考虑用树上启发式合并。 用一个数组记录当前子树的所有权值出现的次数,有新的次数出 阅读全文
posted @ 2018-08-26 16:30 LMissher 阅读(168) 评论(0) 推荐(0)
摘要:题意很迷,给一棵n个节点的树,每个节点有一个权值是这个节点完成其任务的时间。 比如第一个任务的权值是1,完成它将在第一秒,第二个任务的权值是2,完成前两个任务的时间是3秒。 现在问你完成任务的时间再加上罚时是多少,罚时是完成任务的时间再加上它开始做任务的时间。比如一个任务权值是3,从第四秒开始做,那 阅读全文
posted @ 2018-08-26 15:15 LMissher 阅读(177) 评论(0) 推荐(0)