Max GEQ Sum (区间最大值->最大值的覆盖+区间和的最值问题->前缀和最值问题(l-1,r)+是否合格,存在问题变化为最值问题)

D. Max GEQ Sum
time limit per test1.5 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given an array a of n integers. You are asked to find out if the inequality
max(ai,ai+1,…,aj−1,aj)≥ai+ai+1+⋯+aj−1+aj
holds for all pairs of indices (i,j), where 1≤i≤j≤n.

Input
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤105). Description of the test cases follows.

The first line of each test case contains a single integer n (1≤n≤2105)  — the size of the array.

The next line of each test case contains n integers a1,a2,…,an (−109≤ai≤109).

It is guaranteed that the sum of n over all test cases does not exceed 2105.

Output
For each test case, on a new line output "YES" if the condition is satisfied for the given array, and "NO" otherwise. You can print each letter in any case (upper or lower).

Example
inputCopy
3
4
-1 1 -1 2
5
-1 2 -3 2 -1
3
2 3 -1
outputCopy
YES
YES
NO
Note
In test cases 1 and 2, the given condition is satisfied for all (i,j) pairs.

In test case 3, the condition isn't satisfied for the pair (1,2) as max(2,3)<2+3.
View problem

Codeforces Round #795 (Div. 2) A-F题讲解_哔哩哔哩_bilibili 大佬的视频讲解,膜拜膜拜

题意: 让每一个区间的最大值,都大于这个区间和

思路:

  • 我开始做的时候,就瞎想结论啥的没做出来
  • 于是就向大佬膜拜,大佬思路:
  • 由于区间太多了,区间又和最大值联系在一起,就通过最大值把区间给分割开来,就有n个区间
  • 处理: 单调栈,左一遍,右一遍,分别求 li ,和 ri ,(可以通过DP实现)( 区间跳跃得去求)
  • 现在就要判断这n个区间是否合规,由于题目是要求判断 是否合格就行了
  • 于是利用最值思想,这个区间的子区间的最大和都比 ai 小,那么这个区间就合格了,
  • 注意这个子区间是要把ai包含进去哒, 就是  li<=x<i=&& i<=y<=ri ;
  • 如何搞一个 子区间和的最大值?
  • 那就是 利用前缀和 (arr y-arr x-1),让arr y 最大,arr x-1 最小,
  • 判断 arr  在区间的最大,最小,利用 ST表,或者线段树,都是可以实现的(时间复杂度上,ST更小,也更方便) 

膜拜大佬 ORZ!!

代码:待补,欸嘿

posted @ 2022-06-02 20:54  VxiaohuanV  阅读(64)  评论(0编辑  收藏  举报