主席树
meopass
即使摸爬滚打,满身泥泞,我也要前进
展开
-
玲珑杯Round20
“愿ACM没有由乃”1157 - 造物主的戒律每次询问给出一个基准值x。 查询有两个,第一个是区间第k小,如果大于基准值则为-1。第二个也是区间第k小,首先得查出x在对应区间的排名k,之后同上。 需要注意的是原题卡双log做法,因此比起树套树,推荐函数式线段树。#include <bits/stdc++.h>using namespace std;const int maxn = 1e6+10;原创 2017-08-27 23:35:03 · 420 阅读 · 0 评论 -
codeforces 840D Destiny 主席树
简明题意:给出一个长为n的数组,q次询问,每次问[l, r]区间出现次数超过⌊r−l+1k⌋\lfloor\frac{r-l+1}{k}\rfloor的最小数是多少,不存在返回-1。显然对每个询问建立一棵权值线段树即可,因此使用主席树。然后就没有然后了。#include <bits/stdc++.h>using namespace std;const int maxn = 310000;struct原创 2017-08-27 23:42:37 · 292 阅读 · 0 评论 -
BZOJ 3123 LCA + 主席树 + 启发式合并
大致题意:有两种操作。 1. 查询节点x到节点y的路径上的第k小。 2. 连接点x和点y。需要离散化不必多说。 对于第一种操作,经典的LCA + 主席树问题。每次以父亲节点为上一版本建树,对于一次询问的答案就是在区间x−lca[x,y]+y−fa[lca[x,y]]x - lca[x, y] + y - fa[lca[x, y]]的答案。 对于第二种操作,每次启发式合并即可。对于新加入的点,原创 2017-09-18 15:17:06 · 426 阅读 · 0 评论 -
BZOJ 2653 可持久化线段树
大致题意:一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a, b从0开始标号,除法取下整。给你一个长度为n的序列s。回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数。其中a < b < c < d。位置也从0开始标号。强制在线。对于中位数有一个性质,将所有大于等于他的数置为11, 小于他的数置为−1-1,则所有数的和00或11原创 2017-09-19 11:50:59 · 378 阅读 · 0 评论 -
BZOJ 2588 LCA + 主席树
简略题意:树上路径第K大。经典的LCA + 主席树问题。每次以父亲节点为上一版本建树,对于一次询问的答案就是在区间x−lca[x,y]+y−fa[lca[x,y]]x - lca[x, y] + y - fa[lca[x, y]]的答案。A了这题可以看一下加强版。#include <bits/stdc++.h>#define all(x) x.begin(), x.end()using name原创 2017-09-19 20:11:13 · 313 阅读 · 0 评论