数据结构
数据结构总结
weixin_52109411
这个作者很懒,什么都没留下…
展开
-
P1198 [JSOI2008]最大数
虽然这道洛谷题不算难,我拿来练练线段树,但是一直过不了,后来才发现代码中有一处不懂的错误,根本原因还是对线段树理解不到位。记录下来 #include<iostream> using namespace std; #define int long long const int inf=-4611686018427387904;//-(1<<62) int n,mod,t,cnt=1; struct node{ int l,r,val; }tree[800010]; void原创 2021-12-14 22:30:08 · 58 阅读 · 0 评论 -
倍增算法。
本质是动态规划 dp[i][j]代表从i开始,长度为pow(2,j)区间的最大值 核心状态转移方程:dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); 查询的时候判断l和r是否相等,否则log2(r-l)会RE,因为这个错误找了半天 P3865 【模板】ST 表 #include<bits/stdc++.h> using namespace std; int n,m,dp[1000010][20],l,r; inline int read(原创 2021-11-15 00:58:37 · 881 阅读 · 0 评论 -
每周算法学习总结:线段树
线段树是入门选手向正式选手过渡的重要算法工具 相比于树状数组,线段树虽写起来麻烦,但是连续区间修改和查询的功能非常强大。 像求区间之和,区间最大值,区间最大公因数等。 其延迟标记更是其强大所在,因为在区间更新时,一点一点更新的时间复杂度时log(n),而利用延迟标记下推可以大大减少时间复杂度! 模板:(杭电,张煊的金箍棒2) #include<bits/stdc++.h> using namespace std; //树状数组中,子节点的下标是父节点的2倍和2倍+1 struct node{原创 2021-09-28 22:57:40 · 100 阅读 · 0 评论 -
CF52C Circular RMQ
题目地址 题目描述 You are given circular array a_{0},a_{1},…,a_{n-1}a 0 ,a 1 ,…,a n−1 . There are two types of operations with it: inc(lf,rg,v)inc(lf,rg,v) — this operation increases each element on the segment [lf,rg][lf,rg] (inclusively) by vv ; rmq(lf,rg)原创 2021-10-01 11:15:27 · 75 阅读 · 0 评论