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

浙公网安备 33010602011771号