您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页codeforces-817 D. Imbalanced Array(单调栈)

codeforces-817 D. Imbalanced Array(单调栈)

来源:意榕旅游网


#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
typedef long long ll;
int n,a[maxn],L[maxn],R[maxn],L1[maxn],R1[maxn];
stack<int>s;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
	for(int i=1;i<=n;++i)
	{
		while(!s.empty()&&a[s.top()]>a[i]) s.pop();
		if(s.size()==0) L[i]=1;
		else L[i]=s.top()+1;
		s.push(i);
	}
	while(!s.empty()) s.pop();
	for(int i=n;i>=1;--i)
	{
		while(!s.empty()&&a[s.top()]>=a[i]) s.pop();
		if(s.size()==0) R[i]=n;
		else R[i]=s.top()-1;
		s.push(i);
	}
	while(!s.empty()) s.pop();
	for(int i=1;i<=n;++i)
	{
		while(!s.empty()&&a[s.top()]<a[i]) s.pop();
		if(s.size()==0) L1[i]=1;
		else L1[i]=s.top()+1;
		s.push(i);
	}
	while(!s.empty()) s.pop();
	for(int i=n;i>=1;--i)
	{
		while(!s.empty()&&a[s.top()]<=a[i]) s.pop();
		if(s.size()==0) R1[i]=n;
		else R1[i]=s.top()-1;
		s.push(i);
	}
	ll ans=0;
	for(int i=1;i<=n;++i) 
	ans+=1LL*(i-L1[i]+1)*(R1[i]-i+1)*a[i],
	ans-=1LL*(i-L[i]+1)* (R[i]-i+1)*a[i];
	printf("%lld\n",ans);
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务