可持久化线段树
文章平均质量分 54
枫茗、
HELLO,WORLD!
展开
-
2022 浙江省赛F. Easy Fix--思维+主席树
#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef vector<int> VI;const int N=1e5+10;const int M=60*N;int n;int tr[N];int root[x],tot;int lch[M],rch[M],sum[M],op[M][5];int lowbit(int x){ return x&(-x);}.原创 2022-05-20 19:58:35 · 881 阅读 · 4 评论 -
最大异或和--可持久化字典树
字典树#include <iostream>#include <string>#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;const int N=1e5+10;int n,idx=0;int tr[32*N][2];void原创 2022-04-15 17:20:34 · 236 阅读 · 0 评论 -
middle--可持久化线段树+二分
题目链接:[国家集训队]middle - 洛谷题意:样例:思路:输入51703377852714510442243028096905631320645232133 1 0 22 3 1 43 1 4 0输出271451044271451044969056313代码:#include <bits/stdc++.h>using namespace std;const int N=2e4+10;const i原创 2022-04-09 20:49:11 · 395 阅读 · 0 评论 -
To The Moon--可持久化线段树(维护区间和+区间修改)
题目链接:Problem - 4348题意有长度一个为n的数组和m次询问,每次询问为一下四种操作中的一种,初始时间t=0。C l r d: 第(t+1)个版本[l,r]内的数全部加d。Q l r:输出当前版本[l,r]内的区间和。H l r t:输出第t个版本[l,r]内的区间和。B t:回到第t个版本,也就是说当前版本变成第t个版本。样例:输入10 51 2 3 4 5 6 7 8 9 10Q 4 4Q 1 10Q 2 4C 3 6 3Q 2 42原创 2022-04-05 21:00:50 · 1615 阅读 · 0 评论 -
Distance on the tree--树上主席树,树上差分(按边差分)
题目链接:Distance on the tree - 题库 - 计蒜客题意:给定一棵n个节点带边权的树和m次询问,每次询问u到v的路径上权值小于等于k的边的个数。第一行n,m。接下来n-1行u,v,w,表示节点u和v之间的边权为w,在接下来m行u,v,k,查询u到v的路径上权值小于等于k的边的个数。(2<=n<=1e5,1<=m<=1e5,1<=w,k<=1e9)样例:输入13 31 3 22 3 71 3 01 2 41 2 7原创 2022-04-01 16:44:53 · 321 阅读 · 0 评论 -
数颜色--用主席树的不用再白费功夫了,已踩坑
#include <bits/stdc++.h>using namespace std;const int N=3e5+10;const int M=N*100;int n,m;int lch[M],rch[M],sum[M];int root[N],tot=0;int a[N];void cpy(int from,int to){ lch[to]=lch[from]; rch[to]=rch[from]; sum[to]=sum[from];}void ins.原创 2022-03-30 20:15:47 · 423 阅读 · 0 评论 -
little w and Discretization--可持久化线段树
题目链接:https://ac.nowcoder.com/acm/contest/20647/C题意:给定一个长度为n的数组,m次询问,每次询问把一个区间的数字进行离散化,问离散化之后与原本数字不相同的数字个数有多少个。每个询问之间是相互独立的。如对{100,200,500,200,300}进行离散化后将会变成{1,2,4,2,3},离散化前后不相同的数字有5个。样例:输入94 3 1 2 5 3 3 1 481 32 42 51 53 74 74 85 9原创 2022-03-30 17:07:51 · 154 阅读 · 0 评论 -
Stone Games--可持久化线段树 ICPC昆明
题意:给出一个长度为n的数组,有q次询问,每次询问给出一个区间(l,r),求这个区间的数任意相加,不能表示的最小的数是多少,询问采用强制在线。这里每次询问给出的区间[l,r]还有个小坑点,真正的l,r要结合上一轮查询的结果计算得出,初始。这里l,r不能顺次求出,也就是不能用已经更新过的l去求r,低级错误却找了好久。思路:首先,我们想怎么求一个集合不能表示的最小的数。最开始我们一个数都不选,那么可表示的数就是0,最小不可表示的数就是1.那么假设我们当前已经选了若干个数,可以原创 2022-03-28 18:03:14 · 360 阅读 · 0 评论 -
Couriers 可持久化线段树
题意:给一个长度为n的序列a。1≤a[i]≤n。m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2。如果存在,输出这个数,否则输出0。(n,m<=5e5,time=1000ms)思路:住席树的板子题,常见的板子题为求[l,r]区间内第k大的数,这里是让求是否存在一个数的出现次数严格大于区间内其他出现的数,其实是一样的,令k=(r-l+1)/2,一个区间分成两半,肯定最多只有一个的区间存在sum值大于等于k,如果一直遍历到某个叶子节点其sum原创 2022-03-28 11:07:45 · 124 阅读 · 0 评论