![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板#数据结构
Akito_zhima
Akitomoto desu!Shima daisuki!
展开
-
线段树(详细注释—pushdown写法)
#include<bits/stdc++.h> using namespace std; const int M=1e5+5; int n,a[M]; struct SegmentTree{ int l,r;//左右端点 int sum;//区间和 int lazy;//增量延迟标记 }tree[M*4]; //建树 void build(int p,int l,int r){//区间编号,区间左端点,区间右端点 tree[p].l=l;tree[p].r=r;//标识区间左右端原创 2021-10-16 20:29:22 · 594 阅读 · 0 评论 -
线段树(标记永久化写法)
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; struct SegmentTree{ int l,r; int sum; int add; }tree[maxn*4]; int a[maxn]; inline void build(int p,int l,int r){ l=tree[p].l;r=tree[p].r; if(l==r){tree[p].sum=a[l];return;} int原创 2021-10-16 20:30:18 · 158 阅读 · 0 评论 -
树状数组模板
其实树状数组就是一个简单的离散化 主要思想就是活用lowbit lowbit是什么?就是一个数二进制最低位1和后面的0表示的数值 因为每一个数都可以用几个二进制来表示 所以用树状数组可以方便的存储数据 再加上较好理解的区块查询和更新 建议如果没有数学知识的纯板子区间和,区间更新的题都可以用树状数组! #include<bits/stdc++.h> using namespace std; const int M=10000000; int c[M],n,m; int lowbit(int x){原创 2021-10-16 20:36:39 · 69 阅读 · 0 评论 -
treap模板
treap的本质实际上就是tree+heap 用树的形式实现类似于堆得操作 中心代码就是 左旋 右旋 其中的原则就是堆顶最大 (可以用并查集+树链刨分,不过好像有点大材小用了 ) ```cpp #include<bits/stdc++.h> using namespace std; struct node{ int key,priority; int left,right; }; int SIZE=1e5; int num_nodes,root; node nodes[SIZE]; in原创 2021-10-16 20:44:40 · 132 阅读 · 0 评论 -
ST表模板
ST表唯一一个优点就是 求区间最值 线段树 n log(n) 爆搜 n平方 ST表 o(1) 非常的好用! 主要思想就是倍增搜索 再通过简单的擂台比较大小 #include<bits/stdc++.h> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch&g原创 2021-10-16 20:49:04 · 131 阅读 · 0 评论