07 2018 档案

摘要:题目链接: hdu6315 题目大意: 输入一个n,下一行输入一个长度为n的数组b,b是1到n的一种全排列,还有一个长度为n初值全为0的数组a 两种操作: 1) 输入add l r ,将al" role="presentati... 阅读全文
posted @ 2018-07-26 11:21 Apale 阅读(99) 评论(0) 推荐(0)
摘要:#includeusing namespace std;const int maxn = 100000+10;int N,M,R,P,w[maxn];struct{ int to,next; }e[maxnsiz[son[u]]) ... 阅读全文
posted @ 2018-07-24 23:52 Apale 阅读(118) 评论(0) 推荐(0)
摘要:题意:三种操作,0 e 表示插入一个数字e,1 e 表示删除一个数字e,2 e k 表示查询比e大的第k个数,删除和查询均可能没有目标。思路:建一棵权值线段树,维护每个数字区间中数字的数量。 查询时,先查出1到e的数字数量n,然后查询第k+n大。#inclu... 阅读全文
posted @ 2018-07-18 20:44 Apale 阅读(304) 评论(0) 推荐(1)
摘要:题意: 输入N个数字,查询区间[L,R]中有多少个不同的数字(第i个数字为a[i])思路:要维护的是不同的数字的数量,所以每个数只记最后出现的那一次。对N个位置每个位置建一棵线段树,线段树维护的是插入a[i]后树上各区间数字的数量。如果a[i]这个数字在前面... 阅读全文
posted @ 2018-07-18 20:37 Apale 阅读(148) 评论(0) 推荐(0)
摘要:实在太蠢了搞不定ST表o(╥﹏╥)o,只能学个倍增法了。讲倍增法前先看看暴力法。 第一步肯定是dfs求每个点的深度。 查询lca(a,b)时,先把ab中深度较大的点往上移,移到两个点深度相同为止; 现在两个点深度相同了,于是两个点一起往上移,直至移到同一个位... 阅读全文
posted @ 2018-07-14 00:51 Apale 阅读(179) 评论(0) 推荐(0)
摘要:老板与员工之间是树形关系。每次给一个员工下达任务就是修改这个员工为根的子树。 用dfs序把每一棵子树转化成一个区间,用线段树维护,T就是区间更新维护lazy,C就是单点查询。#include using namespace std;const int max... 阅读全文
posted @ 2018-07-09 19:53 Apale 阅读(138) 评论(0) 推荐(0)
摘要:离散化: 对数组排完序后用unique去重,unique返回的是去重后的数组的末地址,减去第一个元素的地址就能得到去重后的数组大小,用lower_bound查找原数字在排序去重后的序列中的位序,用位序代替数字完成离散化。#include#includ... 阅读全文
posted @ 2018-07-09 13:48 Apale 阅读(122) 评论(0) 推荐(0)
摘要:#include#include#includeusing namespace std;#define lson l,m,rt>1); ms[rt>1; } lazy[rt] = -1; }}void ... 阅读全文
posted @ 2018-07-06 23:16 Apale 阅读(121) 评论(0) 推荐(0)