摘要: 题目链接: 解法:用tag数组维护区间最左端的数即可 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls(p) p << 1 #define rs(p) p << 1 | 1 const int 阅读全文
posted @ 2020-01-19 11:54 ___sss 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题意:有n个点,n-1条单向边,每个点都销售一类商品 问从点1开始走,买第一样商品类型为x,买第二样商品类型为y,问不同有序对<x,y>的数量 解法: col[i]表示这个点的商品类型 last[col[i]]表示从1到点i过程中,点i的商品类型上次出现的时候的点的父亲 vis[col[ 阅读全文
posted @ 2019-12-21 15:53 ___sss 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题意:给出n个点,n-1条边求任意两个点的距离平方的和 解法: f[i]表示这个点的高度 sz[i]表示这个子树的大小 szz[i]表示这个这个子树大小的平方 sum[i]表示这个子树所有点高度的和 两个点i, j的距离dis = f[i] + f[j] - 2 * f[lca(i, j 阅读全文
posted @ 2019-12-21 15:26 ___sss 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题意:有三个操作 操作 1:表示节点 i 长出了一个新的儿子节点,权值为0,编号为当前最大编号 +1(也可以理解为,当前是第几个操作 1,新节点的编号就是多少)。 操作 2:表示华华上线做任务使节点 i 的子树中所有节点(即它和它的所有子孙节点)权值加 a 。 询问 3:华华需要给出 i 阅读全文
posted @ 2019-12-12 19:39 ___sss 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题意:有两个操作 操作1:给出n个操作,将区间为l到r的数字改为x 操作2:给出q个操作,输出进行了操作1中的第x到x+y-1操作后的结果 解法: 把询问离线,按照r从小到大排序 每次询问的时候,用珂朵莉树推平区间 求和,这个我们用树状数组维护即可 树状数组求出>=l的和 #includ 阅读全文
posted @ 2019-12-12 19:28 ___sss 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 解法: 先建n颗平衡树,合并的时候将a中最右的结点翻转到根节点,b中最左的结点翻转到根节点,对合并后的根节点进行标记。 #include <bits/stdc++.h> using namespace std; #define ls(p) p << 1 #define rs(p) p < 阅读全文
posted @ 2019-12-09 23:02 ___sss 阅读(218) 评论(0) 推荐(0) 编辑