442C

Posted 123456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了442C相关的知识,希望对你有一定的参考价值。

贪心

感觉思路很奥妙 首先我们把那些比两边小的数删掉,因为不删的话两边的数就会选这个数,这样就成了先上升后下降的序列,很明显除了第一第二大的数都能选,然后统计就好了。

技术分享
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 500010;
int n, top;
ll ans;
ll a[N], st[N];
int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) 
        scanf("%lld", &a[i]);
    for(int i = 1; i <= n; ++i) 
    {
        while(top > 1 && st[top - 1] >= st[top] && st[top] <= a[i]) 
        {
            ans += min(a[i], st[top - 1]);
            --top;
        }
        st[++top] = a[i];    
    }
    sort(st + 1, st + top + 1);
    for(int i = 1; i < top - 1; ++i) ans += st[i];
    printf("%lld\n", ans);
    return 0;
}
View Code

 

以上是关于442C的主要内容,如果未能解决你的问题,请参考以下文章

Artem and Array CodeForces - 442C (贪心)

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板