![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Rsthhwxf
这个作者很懒,什么都没留下…
展开
-
P2422 良好的感觉(单调栈+前缀和)
P2422 良好的感觉题目描述:对于给定的序列,找到区间和与区间最小值乘积最大的区间思路:对于一个点作为最小点的话,覆盖它的区间越大则所求值越大,解决方案就是枚举每一个点作为最小值点,扩大区间,使得区间和最大,可以通过单调栈找到该点的左边界和右边界,前缀和得出该区间的区间和.#include<bits/stdc++.h>using namespace std;#define int long longint a[100005],sums[100005],lefts[10000原创 2021-09-28 13:06:51 · 191 阅读 · 0 评论 -
P1725 琪露诺(单调队列优化dp)
P1725 琪露诺题目描述:n+1个格子,从0开始,从当前位置可以跳到[i+l,i+r]位置,每个位置有冰冻指数,问达到n之后的位置可以得到最大的冰冻指数是多少思路:写过类似的题,考虑用dp,设j属于区间[i-r,i-l] dp[i]=max(a[i]+dp[j],dp[i]),但题目数据过大n*(r-l)有t的可能,然后发现这个递推式其实就是在[i-l,i-r]区间内找到一个最大的值,这个可以使用单调队列维护#include<bits/stdc++.h>using namespa原创 2021-09-28 11:29:07 · 195 阅读 · 0 评论 -
P6140 [USACO07NOV]Best Cow Line S(贪心模拟)
P6140 [USACO07NOV]Best Cow Line S从俩边取字符组成字典序最小的序列,一想就是贪心,比较俩边取更小的字符就好了,不过得注意的是碰到相等的情况得继续向比,找到不相等的为止,通过双指针可以完成这个操作,当时我是特判了left>=right,后面看题解发现可以不用特判.解决问题会有想暴力完成的想法,而不是去尝试将这些点合并起来,以后写题过程多注意.`#include<bits/stdc++.h>using namespace std;#define int原创 2021-09-28 07:24:16 · 90 阅读 · 0 评论 -
P6510 奶牛排队(单调栈+二分)
P6510 奶牛排队 该题要求找出符合条件的最多奶牛数,条件是A作为左端点最矮,B作为右端点最高,中间不能有与A,B相同身高的奶牛,枚举每个端点作为预备B端点,则A端点一定在左边比B端点高的奶牛的后面,也就是找到左边第一个比该点大的数,这个可以用单调栈完成,这个点暂时称为X点,接下来,找A端点,A的条件是在A-B之间没有比它矮的,也就是X-B之间最小的点,该点到B的距离为最长,难点来了,如何维护呢,看完别人的题解才知道,可以用俩个单调栈来维护,通过单调递减栈找到左边第一个大于B的点x,而如何找到x点原创 2021-09-27 15:25:06 · 603 阅读 · 0 评论 -
P1714 切蛋糕(单调队列+前缀和)
P6510 奶牛排队一开始会想用dp解决,跟最大子序列相似,原创 2021-09-27 15:02:02 · 145 阅读 · 0 评论 -
排序的总结
1. 插入排序插入排序只是交换相邻数组的值,是个稳定的排序方法,时间复杂度为O(n*2),输人数据的顺序能大幅影响它的复杂度,整个数列有序且与排序方向一致则复杂度最小.#include<bits/stdc++.h>using namespace std;#define int long longint* insertSort(int a[],int n){ for(int i=0;i<n;i++){ int j=i-1; while(j>=0){ if(a原创 2021-08-27 22:25:50 · 44 阅读 · 0 评论 -
链表的总结
链表总结通过刷一些链表的题,对于指针和结构体有了更深的理解一些基础题有:反转链表合并链表删除节点一些需要思考的如:环形链表(利用哈希表存储)找到链表环的入口(快慢指针,相等时,让一个指针从head出发,它将于low在入口相遇,利用数学知识证明)找到倒数第k个节点(双指针,俩个指针都从头开始,不同的是一个指针晚出发k次)俩个链表的第一个相同节点俩数相加反(给短的链表补充0,然后相加,记得进位就可以了)俩数相加正(先反转链表,再按逆序的写,再反转,看题解优解是原创 2021-08-17 10:11:01 · 71 阅读 · 0 评论