随笔分类 -  主席树

摘要:给n个数字与q次询问,每次询问找出区间不同数字的个数并输出在这个区间里第"(个数+1)/2"次出现的数字。每个数字只有第一次出现会被计数。 考虑主席树对区间不同个数的统计是基于重复的数字只保留最后出现的那次也就是说我们可以找到从后往前数字第一次出现的计数。 但现在要求的是从前向后,考虑从后向前建立主 阅读全文
posted @ 2018-08-31 21:34 LMissher 阅读(194) 评论(0) 推荐(0)
摘要:主席树求区间不同数字个数模板题。 求不同个数就是把数组下标建一颗主席树,如果当前数字已经在前面出现过,那么在当前线段树里把之前出现的区间-1,然后把现在出现的区间+1。 -1是因为当前点和重复数字出现的区间所组成的区间答案要减1,+1相当于现在出现了一个新的数字。 查询的时候查询第R颗线段树的出现L 阅读全文
posted @ 2018-08-31 16:29 LMissher 阅读(177) 评论(0) 推荐(0)
摘要:题目是一个n个点的数,q次询问,每次询问回答一条路径上第k小数。 在树上建主席树,每个点的状态可以从父亲节点得到。 求答案时答案由路径两个端点的权值线段树之和减去lca和lca父亲节点的权值线段树之和。 因为两个端点的权值线段树之和会多算一次跟节点到lca路径上出现的权值以及根节点到lca父亲节点路 阅读全文
posted @ 2018-08-31 14:46 LMissher 阅读(169) 评论(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 阅读(125) 评论(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 阅读(142) 评论(0) 推荐(0)