首页 > 其他分享 >「AGC005B」 Minimum Sum

「AGC005B」 Minimum Sum

时间:2024-03-07 20:12:53浏览次数:27  
标签:ll AGC005B limits top st Minimum sum times Sum

题意

给定一个整数序列 \(a\),求 \(\sum\limits^{N}_{l=1}\sum\limits^{N}_{r=l} \min(a_l,a_{l+1},\cdots,a_{r})\) (注意 \(r\) 的初始值是 \(l\))。

分析

当我们模拟样例时,可以发现,每一个数都只会在一个区间内最小,而最小值不断更新成更小的,所以可以用单调栈求解出 \(a_i\) 对应的 \(l_i,r_i\) 。

设栈数组为 \(st\),栈顶为 \(top\),若 \(a_i<a_{st_{top}}\),把 \(r_{st_{top}}\) 更新为 \(i\),然后弹出栈顶。最后把 \(l_i\) 更新为 \(st_{top}\),并把 \(i\) 入栈。

最后注意有时栈内还有元素,把它们全部弹出,并把它们的 \(r\) 设为 \(n+1\)。

统计答案时,因为 \(i\) 的有效范围在 \(r_i-i\) ,\(i\) 之前有 \(i-l_i\) 个比它大的数(有效区间内),所以 \(a_i\) 被加的次数为 \((i-l_i)\times(r_i-i)\)。

最后答案为 \(\sum\limits^{N}_{i=1}(i-l_i)\times(r_i-i)\times a_i\)。

Code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll maxn=2e5+5;
ll n,a[maxn],ans,top=1,st[maxn],l[maxn],r[maxn];
signed main(){
    n=read();
    for(ll i=1;i<=n;++i)a[i]=read();
    for(ll i=1;i<=n;++i){
        while(a[st[top]]>a[i])r[st[top--]]=i;
        l[i]=st[top],st[++top]=i;
    }
    while(top)r[st[top--]]=n+1;
    for(ll i=1;i<=n;++i){
        ans+=(i-l[i])*(r[i]-i)*a[i];
    }
    printf("%lld",ans);
    return 0;
}

标签:ll,AGC005B,limits,top,st,Minimum,sum,times,Sum
From: https://www.cnblogs.com/run-away/p/18059653

相关文章

  • CF1066E Binary Numbers AND Sum 题解
    分析因为\(a\)是一直没有改变的,移动的只有\(b\),所以从\(a\)的每一位的贡献入手。对于\(a\)中的从低到高第\(i\)位,其对应的十进制值是\(a_{n-i+1}\times2^{i-1}\)。注意到\(b\)是每次右移一位的,所以在\(b\)中能与\(a_{n-i+1}\)匹配的都是在下标区间\([1,m-i+1]......
  • CF622F The Sum of the k-th Powers 题解
    原式为\(k+1\)次多项式,所以需要\(k+2\)个点确定。然后转化,前缀和。\[\begin{equation}n=k+2\\\end{equation}\]\[\begin{equation}f(x)=\sum\limits_{i=0}^{n}y_i\prod\limits_{j=0,j\nei}^{n}\frac{x-x_j}{x_i-x_j}\end{equation}\]\[\begin{equation}x_0=......
  • [ABC282Ex] Min + Sum 题解
    [ABC282Ex]Min+Sum题解题面传送门。题目要求有多少对\((l,r)\)满足\(1\lel\ler\len\)且\(\sum_{i=l}^{r}{b_i}+\min_{i=l}^{r}{a_i}\leS\)。考虑CDQ分治,那么我们需要不断寻找有多少对\((l,r)\)满足\(L\lel\leM<r\leR\)且\(\sum_{i=l}^{r}{b......
  • [LeetCode] 2583. Kth Largest Sum in a Binary Tree
    Youaregiventherootofabinarytreeandapositiveintegerk.Thelevelsuminthetreeisthesumofthevaluesofthenodesthatareonthesamelevel.Returnthekthlargestlevelsuminthetree(notnecessarilydistinct).Iftherearefewerthan......
  • code_summary
    字符串几个库函数的时间复杂度:reverse/split,O(n);双指针法:反转字符串、替换空格;在数组、链表中更常用滑动窗口法,配合哈希表,计数器等:用于寻找子串相关的题目;KMP:用前缀表来对目标串的重复子串进行标记,减少滑动搜索时的后退步数;链表链表的种类主要为:单链表,双链表,循环链表......
  • AI 编程如何颠覆生产力 | 参与体验免费领取 ArchSummit 架构师峰会专属门票
    Sora的初现,已经震惊了整个行业,正在慢慢的颠覆一些垂直行业。在惊叹之余,估计大部分人都在思考如何顺应潮流,驾驭趋势。InfoQ正在筹备2024年6月14-15日深圳ArchSummit架构师峰会,阿里云云原生应用平台负责人丁宇受邀在会议上演讲,他的演讲会围绕AI颠覆程序员/开发者生产......
  • MIT 6.1810 Lab: Summary
    实验笔记MIT6.1810Lab:Xv6andUnixutilitiesMIT6.1810Lab:systemcallsMIT6.1810Lab:pagetablesMIT6.1810Lab:trapsMIT6.1810Lab:Copy-on-WriteForkforxv6MIT6.1810Lab:Multithreading待续总结xv6是一个十分精巧的操作系统,它的每个模块是否简单......
  • 24/02/24 CF280D k-Maximum Subsequence Sum
    这题是我在Luogu上的第\(400\)AC!比惊喜更棒的是三倍惊喜!!!登录\(365\)天祭\(400\)AC祭以及元宵祭!这个其实不是很难的黑题,大家可以去写一下啊。那接下来我们先下午休息一下,然后之后再来讲这个挺好的,大家可以把它写一下,锻炼一下。嗯,写了黑题很有成就感,对吧?——lxl24......
  • CF1832B Maximum Sum 题解
    【题目描述】给定一个长度为\(n\)的数列,其中每个元素互不相同,进行\(k\)次操作,每次可以选择删除序列中最小的两个数或最大的一个数。求操作后剩余数的和的最大值。【思路】我们构造一组数据:首先我们看到题目中的一句话:每次可以选择删除序列中最小的两个数或最大的一个数。......
  • CF1832B Maximum Sum 题解
    【题目描述】给定一个长度为\(n\)的数列,其中每个元素互不相同,进行\(k\)次操作,每次可以选择删除序列中最小的两个数或最大的一个数。求操作后剩余数的和的最大值。【思路】我们构造一组数据:首先我们看到题目中的一句话:每次可以选择删除序列中最小的两个数或最大的一个数。......