主席树
穷源溯流
路很长,尽管走便是。
展开
-
洛谷 P2163 [SHOI2007]园丁的烦恼(主席树)
const int N=5e5+5; int n,m,_; int i,j,k; //int a[N]; struct Node { int l,r; int sz; }t[N<<5]; struct point { int x,y; void read(){ sdd(x,y); } bool operator<(point ...原创 2021-05-16 10:05:22 · 306 阅读 · 0 评论 -
洛谷 P4587 [FJOI2016]神秘数(主席树)
这题竟然是ICPC的原题,哦不,ICPC竟然是福建省的原题M.Stone Gamesconst int N=2e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; ll sum; }t[N<<5]; int root[N],tot=0;void update(int &x,int y,int l,i...原创 2021-05-10 18:42:14 · 285 阅读 · 0 评论 -
洛谷 P2633 Count on a tree(树上主席树)
emmmm,题目一直 RE,知道不知道怎么 AC 之后,然后之前 RE 的代码也好了,我是不是把洛谷的测评机玩坏了const int N=2e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<5]; int root[N],tot=0; vector<int> G[N],...原创 2021-05-10 16:53:42 · 348 阅读 · 0 评论 -
Gym The 17th Zhejiang Provincial Collegiate Programming Contest E.Easy DP Problem(主席树)
const int N=1e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; ll sum; }t[N<<5]; int root[N],tot=0; vector<int> v;void update(int &x,int y,int l,int r,int pos){.原创 2021-05-05 10:30:54 · 253 阅读 · 0 评论 -
HDU 6601 Keen On Everything But Triangle(主席树+思维)
const int N=2e5+5; int n,m; int i,j,k; int a[N]; struct Ndoe { int sz; int l,r; }t[N<<5]; int root[N],tot=0; //int b[N];void update(int &x,int y,int l,int r,int pos){ x=++tot; t[x...原创 2021-04-26 13:56:26 · 177 阅读 · 0 评论 -
洛谷 P3168 [CQOI2015]任务查询系统(主席树+差分)
const int N=2e5+5; int n,m; int i,j,k; //int a[N]; struct Node { int l,r; int sz; ll sum; }t[N<<5]; int root[N],tot=0; struct Task { int pos; int val; int t...原创 2021-04-26 11:08:37 · 178 阅读 · 0 评论 -
洛谷 P3293 [SCOI2016]美味(主席树)
const int N=2e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<5]; int root[N],tot=0;void update(int &x,int y,int l,int r,int pos){ x=++tot; t[x]=t[y]; t[x]...原创 2021-04-25 19:48:03 · 199 阅读 · 0 评论 -
HDU 6483 A Sequence Game(主席树+线段树)
const int N=1e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sum; }t[N<<5]; int root[N],tot=0; map<int,int> vis; void update(int &x,int y,int pos,int c,int l,int...原创 2021-04-24 16:20:34 · 159 阅读 · 0 评论 -
Codeforces Round #716 (Div. 2) D. Cut and Stick(主席树)
const int N=3e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int sum; }T[N*40]; int root[N],tot=0;void update(int l,int r,int &x,int y,int pos){ T[++tot]=T[y]; T[tot].sum++; ...原创 2021-04-20 08:09:08 · 191 阅读 · 0 评论 -
洛谷 CF484E Sign on Fence(主席树+二分)
前置题目const int N=1e5+5; int n,m,_; int i,j,k; struct Step { int c,id; bool operator<(Step &o){ return c<o.c; } }a[N]; struct Node { int l,r,len; int sum,lsu...原创 2021-04-17 20:10:40 · 229 阅读 · 0 评论 -
Codeforces Round #457 (Div. 2) D. Jamie and To-do List(主席树×2)
const int N=2e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<6]; int root[N],arr[N],tot=0; map<string ,int > mp; int cnt=0;void update(int &x,in...原创 2021-04-16 16:14:35 · 151 阅读 · 0 评论 -
牛客练习赛34 F.little w and Discretization(主席树)
const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz,minn; void update(int x){ sz++; minn=x; } }t[N<<5]; int root[N],tot=0; int b[N],len;void push_up(in...原创 2021-04-15 17:22:19 · 248 阅读 · 0 评论 -
洛谷 SP3267 DQUERY - D-query(主席树)
const int N=1e6+5; int n,m,_; int i,j,k; int a[N]; int vis[N]; struct Node { int l,r; int sum; }t[N<<5]; int root[N],tot=0;void update(int &x,int y,int pos,int c,int l,int r){ x=++tot...原创 2021-04-12 15:44:54 · 157 阅读 · 0 评论 -
洛谷 P2839 [国家集训队]middle(可持久化线段树+二分)
const int N=2e4+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sum,lsum,rsum; void update(int x) { sum = lsum = rsum = x ; } Node (int l=0,int r=0,in...原创 2021-04-12 11:04:45 · 177 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) M.Stone Games(主席树)
const int N=1e6+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; ll sum; }t[N*40]; int root[N],tot=0,len; vector<int> v; int x,y;void update(int &x,int y,int pos,int l,int ...原创 2021-04-11 09:36:15 · 459 阅读 · 0 评论 -
2019牛客国庆集训派对day2 C.Just h-index(主席树+二分)
const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<5]; int root[N],tot=0;void update(int &x,int y,int pos,int l,int r){ x=++tot; t[x]=t[y]; t[...原创 2021-04-08 18:33:11 · 711 阅读 · 0 评论 -
计蒜客 攀登山峰(主席树)
const int N=1e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<5]; int root[N],tot=0; vector<int> v;void update(int &x,int y,int l,int r,int pos){ x...原创 2021-04-07 16:24:45 · 143 阅读 · 0 评论 -
HDU 4348 To the moon(可持久化线段树)
const int N=1e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; ll sum,lazy; }t[N<<5]; int root[N],tot=0;void push_up(int x){ t[x].sum=t[t[x].l].sum+t[t[x].r].sum;}void build...原创 2021-04-07 10:43:34 · 133 阅读 · 0 评论 -
HDU 6621 K-th Closest Distance(主席树+二分)
const int N=1e6+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<5]; int root[N],tot=0; vector<int> v;//int getid(int x){ return lower_bound(v.begin(),v.end(),x)-...原创 2021-04-07 08:50:42 · 130 阅读 · 0 评论 -
洛谷 P4602 [CTSC2018]混合果汁(主席树+二分)
const int N=1e5+5; int n,m,_; int i,j,k; //int a[N]; struct Node { int l,r; ll sum,p,v; }t[N<<5]; int root[N],tot=0; struct O { int p,l,d; bool operator<(O o){ ...原创 2021-04-03 19:20:42 · 273 阅读 · 0 评论 -
HDU 4417 Super Mario(主席树)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sstream>#include <queue>#include <vector>#define rush() int T;cin>>T;while(T--)#define ms(a,b) me...原创 2021-04-03 16:30:21 · 172 阅读 · 0 评论 -
计蒜客 The Preliminary Contest for ICPC Asia Xuzhou 2019 I. query(主席树)
const int N=1e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N*200]; int root[N*17],tot=0; vector<int> v[N]; int pos[N];void update(int &x,int y,int l,int r,in...原创 2021-04-03 14:40:29 · 166 阅读 · 0 评论 -
洛谷 P4137 Rmq Problem / mex(主席树)
const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; int minn; void update(int x){ sz++; minn=x; } }t[N<<5]; int root[N],tot=0;void push_up(int id){...原创 2021-04-02 18:44:43 · 186 阅读 · 0 评论 -
Codeforces Round #429 (Div. 1) D. Destiny(主席树)
const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; void update(){ sz++; } }t[N<<5]; int root[N],tot=0;void update(int &x,int y,int pos,int l,int r){ ...原创 2021-04-02 16:43:40 · 197 阅读 · 0 评论 -
洛谷 P2468 [SDOI2010]粟粟的书架(主席树+二分)
//#pragma GCC optimize(2)//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <vector>#include <...原创 2021-04-02 13:17:54 · 119 阅读 · 0 评论 -
训练总结
这几天总算把主席树弄懂了,洛谷上的主席树的相关练习也把提高组的完成了,但是还是感觉比较空虚昨天开了一场 CF ,模拟题思路太混乱,真和洛谷上说的一样,学数据结构把自己给学傻了。一开始学习主席树的时候以为是一种特殊的权值线段树,但是主席树强就强在可以寻找历史版本,总结一下遇到的几个场景查询区间第 k 大元素的值,这算是模板题了,将数据离散化之后将每个节点维护所拥有数值的个数,而根结点 root[i] 则表示了 [1,i] 区间内的数值个数的索引 ...原创 2021-01-27 22:10:17 · 182 阅读 · 2 评论 -
洛谷 P1383 高级打字机(主席树)
题目描述得不够准确,撤销时,可以将之前的撤销操作同时撤销这样题目就要求我们保留之前的所有数据,我们利用主席树维护一段字符串,长度为 1e5,假设全部是添加字符设当前的根节点为 now撤销操作相当于将之前的 now-x 节点复制过来,作为 now+1 根节点添加操作在区间的末尾添加一个字符查询操作,由于s[i] 字符放在 i 位置,所以直接查询第 x 个位置的字符即可const int N=1e5+5; int n,m; int i,j,k; ...原创 2021-01-27 10:40:22 · 210 阅读 · 0 评论 -
洛谷 P3939 数颜色(主席树)
题目要用权值线段树来解决没有问题,但是权值线段树还要维护所出现的区间,采用主席树,每一种颜色建一棵树,记录其所在的位置,由于建树过程中需要动态开点,更新操作时不需要动态开点,所以要特判一下是否要开点const int N=3e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int sum; #define lson id&l...原创 2021-01-25 22:11:19 · 355 阅读 · 0 评论 -
洛谷 P3567 [POI2014]KUR-Couriers(主席树)
由于主席树是一颗特殊的权值线段树,所以只需要判断当前节点权值所拥有的数量是否大于 (r-l+1) 即可const int N=5e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int sum; }t[N*40]; int root[N],tot=0; //历史版本根节点标号,总节点个数 vector<int> v...原创 2021-01-25 20:17:29 · 199 阅读 · 0 评论 -
洛谷 P3919 【模板】可持久化线段树 1(可持久化数组)
const int N=1e6+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int val; }t[N*40]; int root[N],tot=0; //历史版本根节点标号,总节点个数int build(int l,int r){ int p=++tot; if(l==r){ t[p].val=a[l]; retu...原创 2021-01-24 23:23:29 · 166 阅读 · 0 评论 -
洛谷 P1533 可怜的狗狗(主席树)
const int N=3e5+5; int i,j,k; int n,m; int a[N]; struct Node { int l,r; int sum; #define lson id<<1 #define rson id<<1|1 }t[N*20]; int root[N],tot=0; vector<int> v;int get_id(int x){ return lower_boun...原创 2020-12-06 12:15:55 · 274 阅读 · 0 评论 -
POI 2014 Couriers(主席树)
询问任意一个区间求是否有一个数在这个区间中出现次数严格大于一半,若有输出其值,若没有输出 0const int N=5e5+5; int n,m,t; int i,j,k; int a[N]; vector<int> v; int root[N],cnt=0; //每一个根节点的编号 结点的个数 struct Node { int l,r; int sum; }T[N*40];...原创 2020-10-03 09:03:33 · 810 阅读 · 0 评论 -
POJ 2104 K-th Number(主席树)
求任意区间第 k 大的元素const int N=1e5+5; int n,m,t; int i,j,k; int a[N]; vector<int> v; int root[N],cnt=0; struct Node { int l,r; int sum; }T[N*40];int get_id(int x){ return lower_bound(v.begin...原创 2020-10-02 23:11:42 · 205 阅读 · 0 评论