Description
Input
* Line 1: 牛的数量 N。
* Lines 2..N+1: 第 i+1 是一个整数,表示第i头牛的高度。
Output
* Line 1: 一个整数表示c[1] 至 c[N]的和。
Sample Input
6
10
3
7
4
12
2
输入解释:
六头牛排成一排,高度依次是 10, 3, 7, 4, 12, 2。
10
3
7
4
12
2
输入解释:
六头牛排成一排,高度依次是 10, 3, 7, 4, 12, 2。
Sample Output
5
输出解释:3+0+1+0+1+0=5
输出解释:3+0+1+0+1+0=5
题解
单调栈,坑的是要开long long。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,a[80002],s[80002],top;
long long ans;
int main()
{
scanf("%d",&n);
int i;
for(i=1;i<=n;i++) scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{if(a[i]<s[top]) ans+=top;
else
{while(a[i]>=s[top]&&top>0) top--;
ans+=top;
}
s[++top]=a[i];
}
printf("%lld",ans);
return 0;
}