摘要:
给一棵边权树,再给三个操作。第一个把一条边权改为v,第二个将一条链的值取反,第三个求一条链的最大值。 考虑用线段树维护连续区间的最大最小值。区间取反打lazy标记,如果lazy是奇数就取反再把最大最小值交换下放,否则不管,单点更新和区间查询很简单。 最后用树剖更新区间。把边权映射到点权即可。 #in 阅读全文
posted @ 2018-08-27 21:58
LMissher
阅读(148)
评论(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
阅读(133)
评论(0)
推荐(0)
摘要:
树链剖分模板题(处理边权) 注意把边权归到点上,在查询的时候注意不要lca点的权值,另外线段树注意如果当两个点在同一条重链且都在lca点时,直接返回。 树状数组最后计算链时不用归到重儿子上,直接减就好。 segment_tree: #include <cstdio> #include <cstrin 阅读全文
posted @ 2018-08-27 16:33
LMissher
阅读(152)
评论(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
阅读(163)
评论(0)
推荐(0)
摘要:
树链剖分模板题。更新一条链的值以及求一条链的值。 熟练剖分就是把树剖成重链与轻链,然后利用重链的性质快速的把要更新的两个节点间的路径快速进行更新,也就是快速找到lca。进行更新或查询。 #include <bits/stdc++.h> #define Lson l,mid,rt<<1 #define 阅读全文
posted @ 2018-08-27 10:57
LMissher
阅读(163)
评论(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
阅读(108)
评论(0)
推荐(0)

浙公网安备 33010602011771号