题目:https://www.luogu.org/problemnew/show/P3834 无法忍受了,我要写主席树! 解决区间第 k 大查询问题,可以用主席树,像前缀和一样建立 n 棵前缀区间的权值线段树: 然后 n 棵线段树可以共用一些节点: 线段树的 sum 可以相减,利用这个查询即可: 什么嘛,主席树也没我想得那么难(蛮简单的)! 代码如下: #include<iostream> #include<cstdio> #include<cstring> #incl
1.题意有坑,实际要求第k小. 2.没学过动态开点也没学过主席树,看一下博主思路然后妄想自己实现的后果就是拿命去调bug. const int maxn = 1e5 + 5; int test, n, m, tot; int a[maxn], b[maxn]; namespace Seg { #define ls(p) t[p].l #define rs(p) t[p].r int sz, root[maxn]; struct Node { int sum, l, r; }t[maxn * 20
线段树板子题练手用 #include<cstdio> using namespace std; ; int a[maxn],n; struct Node{ int l,r; long long sum,lazy; void update(long long val){ sum+=1ll*(r-l+)*val; lazy+=val; } }tree[maxn*]; void push_up(int x){ tree[x].sum=tree[x<<].sum+tree[x<<
链接:https://www.nowcoder.com/acm/contest/200/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的元素的平方 和 3 l r x 将区间[l,r]内的每一个
题意 题目链接 Sol 李超线段树板子题.具体原理就不讲了. 一开始自己yy着写差点写自闭都快把叉积搬出来了... 后来看了下litble的写法才发现原来可以写的这么清晰简洁Orz #include<bits/stdc++.h> #define pdd pair<double, double> #define MP make_pair #define fi first #define se second using namespace std; const int MAXN = 1
题意 题目链接 Sol 树链剖分板子 + 动态开节点线段树板子 #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second //#define int long long #define LL long long #define Fin(x) {freopen(#x".in",&quo
题意 题目链接 Sol 紫色的线段树板子题??... #include<iostream> #include<cstdio> #include<cmath> using namespace std; const int MAXN = 1e6 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; while (c < '0' || c > '9') {if (c == '-')f = -
动态开结点线段树板子. #include<cstdio> using namespace std; typedef long long ll; ll sumv[400005],delta[400005]; int lc[400005],rc[400005],tot,root; void newnode(int &rt){ rt=++tot; lc[rt]=rc[rt]=0; sumv[rt]=delta[rt]=0; } void buildtree(int &rt,int l