首页 > 其他分享 >907. 子数组的最小值之和(贡献法,单调栈,前后缀分解)

907. 子数组的最小值之和(贡献法,单调栈,前后缀分解)

时间:2023-11-27 17:23:26浏览次数:31  
标签:pre suf arr 907 后缀 pop stk int 最小值

 题目不难,但是涉及到的知识点很丰富。

class Solution:
    def sumSubarrayMins(self, arr: List[int]) -> int:
        MOD = 10 ** 9 + 7
        n = len(arr)
        pre = [-1] * n
        suf = [n] * n
        stk = []

        for i in range(n):
            while stk and arr[stk[-1]] >= arr[i]:
                stk.pop()
            if stk:
                pre[i] = stk[-1]
            stk.append(i)

        stk.clear()

        for i in range(n - 1, -1, -1):
            while stk and arr[stk[-1]] > arr[i]:
                stk.pop()
            if stk:
                suf[i] = stk[-1]
            stk.append(i)

        return sum((i - pre[i]) * (suf[i] - i) * v for i, v in enumerate(arr)) % MOD

 

标签:pre,suf,arr,907,后缀,pop,stk,int,最小值
From: https://www.cnblogs.com/zk6696/p/17859841.html

相关文章

  • mysql多个字段最大最小值
    转自:https://www.jb51.net/article/263686.htm1、语法最大值:GREATEST(expr_1,expr_2,...expr_n)最小值:LEAST(expr_1,expr_2,...expr_n)2、说明GREATEST(expr_1,expr_2,...expr_n)函数从表达式(列、常量、计算值)expr_1,expr_2,...expr_n等中找出最大的数返回......
  • 逆波兰表达式(后缀表达式)
    逆波兰表达式1.后缀表达式首先将逆波兰的数字和符号分割开来,再通过将后缀表达式放到ArrayList中,然后配合栈来完成计算。后缀表达式计算结果过程1.如果是数则直接入栈,通过正则表达式取数(包含多位数)2.如果是运算符,则先弹出两个数,运算完成后(注意减法和除法后弹出数是被减数/被除......
  • P8907 [USACO22DEC] Making Friends P 题解
    明明看着不难的题目,却意外的卡人。思路考虑两头奶牛可以成为朋友条件是什么。存在一条路径连接这两头奶牛。且除去端点外的路径上的所有点的编号小于两端点的较小值。充分必要性都比较显然。如何维护。我们可以从小到大加入点,维护这些路径。对于每个点维护一个\(\text{se......
  • Python批量求取Excel表格每一个4行内某列的最大值、最小值
      本文介绍基于Python语言,基于Excel表格文件内某一列的数据,计算这一列数据在每一个指定数量的行的范围内(例如每一个4行的范围内)的区间最大值的方法。  已知我们现有一个.csv格式的Excel表格文件,其中有一列数据,我们希望对其加以区间最大值的计算——即从这一列的数据部分(也就是......
  • P7907 [Ynoi2005] rmscne 题解
    P7907[Ynoi2005]rmscne题解退役前的最后一篇题解,献给Ynoi。再见了各位。题目大意给定一个长度为\(n\)的序列和\(m\)次查询,对于每次查询,给定\(l,r\),求出一个最短的子区间\([l',r']\),满足所有在区间\([l,r]\)中出现的数也在\([l',r']\)中出现过。题解题还是很......
  • Codeforces Round 907 (Div. 2)
    \(A.SortingwithTwos\)https://codeforces.com/contest/1891/submission/232689614\(B.DejaVu\)https://codeforces.com/contest/1891/submission/232690141\(C.SmiloandMonsters\)https://codeforces.com/contest/1891/submission/232691988\(D.Suspic......
  • CF907 div2
    CF907div2A.SortingwithTwos题意给一个长度为n的序列,可以进行的操作是,选取一个i,令前\(2^i\)个元素减1,问若干次操作之后能否使得序列成为不降序列。数据范围多组数据\(1<=T<=10^4\),\(1<=n<=20\),\(0<=a_i<=1000\)输入样例851234556534496557......
  • MATLAB寻找最大值和最小值
     最大值C=max(A)最小值C=min(A)如果A是一个向量,max(A)返回A中的最大/最小元素。如果A是一个矩阵,max(A)将A中的每一列作为一个向量,并返回一个行向量,这个行向量包含了每一列的最大/小元素。比如:a=[1,7,10];b=min(a);得到:b=1而:a=[1,7,10;6,5,4;6,5,5]......
  • JavaScript string对象(属性,方法)获取图片后缀案例 输入和输出结果转换形式案例
    一、创建string对象varstrOb=newString("abcefg");varstrOb=String("abcefg");varstrOb="abcefg";二、属性length  (字符串长度)varstr='hello';console.log(str.length)//5三、方法1、子字符串位置indexOf(string,[index])str......
  • (Lora训练)(承接midjourney数据修改)(建对应名称txt与删txt内部后缀,括号,数字与转换下划线)Lo
    importosimportredefcreate_txt_from_image():#请求用户输入文件夹地址root_folder=input("请输入图片所在文件夹的完整路径:")#判断路径是否存在ifnotos.path.exists(root_folder):print("路径不存在,请检查输入的地址。")return#用......