Max GEQ Sum (区间的子区间最大值(ST,线段树)+区间最大值的包含范围+是否合格,存在问题变化为最值问题)
作者:互联网
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≤2⋅105) — 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 2⋅105. 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!!
代码:待补,欸嘿
标签:case,GEQ,ai,最大值,arr,test,区间 来源: https://www.cnblogs.com/Lamboofhome/p/16338999.html