Codeforces - Artem and Array

题目链接:Codeforces - Artem and Array


可以发现,如果某一个数字两边都是比他大的数字,那么这个数字是一定可以删除,并且最优。

然后可以用栈来维护删除的操作。

最后的序列除了最大值和次大值,都是可以获得的。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+10;
int a[N],n,res,top,s[N];	
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		while(top>=2){
			if(s[top]<=s[top-1]&&a[i]>=s[top])	res+=min(s[--top],a[i]);
			else	break;
		}
		s[++top]=a[i];
	}
	sort(s+1,s+1+top);
	for(int i=1;i<top-1;i++)	res+=s[i];
	cout<<res;
	return 0;
}
发布了579 篇原创文章 · 获赞 242 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/104271667
今日推荐