![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
Freeman_sason
SSL毕业学生
展开
-
C/C++-Circular RMQ
Circular RMQ 题目链接 根据题目的时间与数据范围可知,本题要用到线段树。题目的大致意思就是线段树求环形区间最值问题。 思路: 难点1: 这道题是一个环形数列,做题的时候千万不要看到环形就打退堂鼓了,其实仔细思考一下,解法还是很易得的。 1.我们可以开两倍数组存原数列,树状数组也开两倍,但这样可能会MLE(因为我没试过)。 2.我们也可以直接存,在输入询问端点时,用分类讨论法,我们设l,r为询问区间的左,右两端点,则: 当l <= r时,不涉及到环,正常处理,如下图: 但l &原创 2021-07-20 17:56:46 · 157 阅读 · 0 评论 -
C/C++A + B题解
A + B 众所周知,A + B是一道世界难题,俗话说: 好钢要用在刀刃上,A + B要放在线段树上: CODE: #include<iostream> #include<cstdio> #include<algorithm> #define ll long long #define INF 0x3f3f3f3f using namespace std; struct node { ll l; ll r; ll sum; }st[20]; void bui原创 2021-07-18 08:41:25 · 356 阅读 · 0 评论 -
C/C++AT2412 [JOI 2007 Final]最大の和
最大的和 题目链接 题目让我们求:长度为N的数列中,连续K项的区间和的最大值。 如:1 6 8 2 3 假如K为3,那么有如下几段长度为K的区间: (下标从1开始)1−3,2−4,3−51-3,2-4,3-51−3,2−4,3−5 区间和分别为:15,16,14。很显然,最大值为2-4这段区间,也就是16. 本题前置知识:前缀和或线段树或树状数组,前缀和是这题的正解,但我不想用 。 CODE: #include<iostream> #include<cstdio>原创 2021-07-18 13:28:14 · 140 阅读 · 0 评论