
持久化数据结构
文章平均质量分 78
做不完的ACM
加油,努力
展开
-
HDU5919主席树
题意CCPC的I题。给出一个序列,问区间[l, r]中所有不同元素出现的第一个位置(取最左)组成的序列中的中位数。 第i个询问区间依赖于第i-1个询问的答案,所以是强制在线的。题解比较经典的主席树维护区间种类问题的变形。相同元素只取最左侧位置,所以对序列a,从a[n]到a[1]建立主席树,插入新元素到主席树中时取消相同元素的贡献,只保留最左侧元素。 查询[l, r]的时候,查询第l个版本的主席树就...原创 2018-05-25 01:00:57 · 161 阅读 · 0 评论 -
落谷P4113 [HEOI2012]采花
题目链接:https://www.luogu.org/problemnew/show/P4113题目描述萧薰儿是古国的公主,平时的一大爱好是采花。今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的...原创 2018-05-25 17:37:43 · 225 阅读 · 0 评论 -
HDU6191持久化字典树+DFS序
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 7;int val[maxn];vector<int>g[maxn];int in[maxn], out[maxn];int rt[maxn], tot, time_tag;struct node{ int lc,...原创 2018-05-27 02:06:30 · 212 阅读 · 0 评论 -
湖北省赛持久化字典树
题解:主席树维护,利用前缀和思想做差贪心。题目链接:https://www.nowcoder.com/acm/contest/104#question#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 7;struct node{ int nxt[2], v;}t[maxn * ...原创 2018-05-27 02:08:14 · 149 阅读 · 0 评论 -
主席树HDU2665,区间第k小。
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 7;struct node{ int lc, rc, v; node () {lc=rc=v=0;}}t[maxn*20];int tot;int a[maxn];int b[maxn];int rt[maxn];i...原创 2018-05-23 17:15:03 · 158 阅读 · 0 评论 -
HDU4417
题目大意为给定一个长度为n的区间,同时给出m个询问,每次询问在区间[l,r]中有多少个数小于或等于k。同样考虑用主席树来维护,每次只需要找到序列b中第一个等于k的数,那么要求的数必定在b[1]~b[upper_bound(k)]这个范围内,接下来就像线段树统计区间个数那样,若完全包含则直接加上e[rr].sum-e[ll].sum,否则就分两边递归统计。而建树什么的就直接套模板即可。还要注意一点,...原创 2018-05-24 01:09:43 · 622 阅读 · 0 评论 -
Codeforces960F
【题目】F. Pathwalks【题意】给定n个点m条边的有向图,可能不连通有重边有自环。每条边有编号 i 和边权 wi ,求最长的路径(可以经过重复节点)满足编号和边权都严格递增。n,m,wi<=10^5。【算法】主席树+DP【题解】这个和LIS十分类似,只要在考虑LIS的树状数组做法的前提下多考虑节点搭配问题,即f[i]=f[j]+1还需要e[j].v=e[i].u。所以对每个节点建可持...原创 2018-05-24 02:17:57 · 208 阅读 · 0 评论 -
Codeforces961E
题意: 一个剧一共有n季,每季有ai集。问有多少对x,y(x≠y),使得第x季有第y集且第y季有第x集。题解:问题可以转换成对于当前第i个数,区间1~min(a[i], i-1) 有多少个数大于i的,转换成主席树求解。#include <bits/stdc++.h>using namespace std;const int maxn = 2e5 + 7;struct node...原创 2018-05-24 13:37:19 · 275 阅读 · 0 评论