感觉这种从左向右统计的题目都可以用到栈来优化
单调栈,从左向右扫
ps:STL里的栈是比较快的,自己是、手写的栈效率跟它差不多啊。。。

#include<stdio.h>
#include<iostream>
#include<stack>
using namespace std;
int a[80009];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
stack <int>ss;
long long all=0;
ss.push(a[0]);
for(i=1;i<n;i++)
{
if(a[i]<ss.top())
{
all+=ss.size();
ss.push(a[i]);
}
else
{
while(ss.top()<=a[i])
{
ss.pop();
if(ss.empty())
break;
}
all+=ss.size();
ss.push(a[i]);
}
}
printf("%lld\n",all);
}
}