说明:s1=0, s2=1, s3=2, s4=1, s5=1。
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<stack>
5 using namespace std;
6 int n,a[15050],ans,s[15009],top=1;
7 int main()
8 {
9 scanf("%d",&n);
10 for(int i=1;i<=n;i++)
11 scanf("%d",&a[i]);
12 s[1]=a[1];
13 for(int i=2;i<=n;i++)
14 {
15 ans+=top;
16 if(s[top]>a[i]) s[++top]=a[i];
17 else {
18 while(s[top]<=a[i]&&top>=1)
19 {
20 top--;
21 }
22 s[++top]=a[i];
23 }
24 }
25 printf("%d",ans);
26 return 0;
27 }
本来用STL写的,退栈的时候老出错,手敲单调栈~~~