求助一道单调栈题at2060
  • 板块学术版
  • 楼主pl_cosmonaut
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/5/13 23:46
  • 上次更新2023/10/28 01:31:14
查看原帖
求助一道单调栈题at2060
545507
pl_cosmonaut楼主2022/5/13 23:46
#include<bits/stdc++.h>
using namespace std;
int n;
int a[200001];
int q[200001],h,t;
int l[200001],r[200001];
int main(){
	cin>>n;
	int ans=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	q[1]=h=t=1;
	for(int i=1;i<=n;++i)r[i]=n+1,l[i]=0;
	for(int i=2;i<=n;i++){
		while(h<=t && a[q[t]]>=a[i]){
			r[q[t]]=i;
			t--;
		}
		l[i]=q[t];
		q[++t]=i;
	}
	for(int i=1;i<=n;i++){
		ans+=(i-l[i])*(r[i]-i)*a[i];
	}
	cout<<ans;
	return 0;
}

2022/5/13 23:46
加载中...