首页 > 区区区间间间
头像 精神病科黄主任
发表于 2020-05-20 18:17:22
思路:就是求所有子区间(区间长度大于1的子区间)的最大值减去最小值的和是多少。我们对原式子拆分一下可得其中max(l,r)表示区间l到r的最大值,min(l,r)表示区间l到r的最小值。那么问题就转化为 求所有区间长度大于1的子区间的最大值之和/最小值之和。暴力的方法就是两个for枚举起点和终点去计 展开全文
头像 sunny_forever
发表于 2021-08-05 18:07:14
思路 问题可以转化为 求每个区间(区间长度大于1的区间)的最大值 与 最小值,最大值之和 减去 最小值之和 就是答案 注:下面所提区间,默认 区间长度大于 1 如何求 最大值之和 与 最小值之和 1:枚举每个区间,时间复杂度 O(n^2) ==> 超时 2:枚举每个值,假设该值为区间最大值 展开全文
头像 ailanxier
发表于 2020-06-14 21:20:26
在做这道题之前我还不知道单调栈,是看一位大佬的题解才会的。为什么要求所有区间最大值之和-最小值之和就不详细说了,上面的题解有解释。这道题中使用的是单调递减栈,即维持栈中元素时单调递减的,如果进入一个比栈顶要大的元素,就要将栈中所有比这个元素小的栈全部弹栈。在这个过程中就可以求出一个元素的可以在多长的 展开全文
头像 平凡的小白
发表于 2020-08-19 20:15:09
。 while(j>1&&a[j-1]<=a[i])//下标对应的值等于a[i]的点也能取 j=l[j-1]; while(j<n&&a[j+1]<a[i])//下标对应的值等于a[i]的点不能取 j=r[j+1];Code 展开全文
头像 ziuch
发表于 2020-08-23 23:30:53
题目描述 给出长度为n的序列a,其中第i个元素为aia_iai,定义区间(l,r)的价值为 vl,r=max(ai−aj∣l⩽i,j⩽r)v_{l,r} = max(a_i - a_j | l \leqslant i,j\leqslant 展开全文
头像 fakesheep
发表于 2022-03-18 16:17:55
#include <bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 7; int t,n; int a[N]; /* 1.观察到式子就是求区间的最大值减最小值的和,我们分别求最大值 展开全文
头像 古力娜扎头发
发表于 2023-03-24 23:16:31
题目描述 题目本质上就是求任意一个长度大于1的区间内的最大值和最小值的差值的总和。 如果暴力:就是两层循环10^5肯定要超时 思路 使用单调栈。 主要思想:反向思考 一个区间内的最大最小值必定是在给定的序列中------反向推导----> 求出序列中每个数所能包拢的最大或最小值范围,某个区间只 展开全文

等你来战

查看全部