#include<bits/stdc++.h>
#define MX 300000
using namespace std;
int a[MX + 10];
stack<int> s;
int ans;
int main()
{
int n,i,j;
cin >> n;
for (i = 1;i <= n;i++)
{
cin >> a[i];
}
s.push(1);
int mn = a[1],ma = a[1];
for (i = 2;i <= n + 1;i++)
{
if (a[i] < ma && a[i] >= mn)
{
s.push(i);
}
else if (a[i] >= ma)
{
s.push(i);
ma = a[i];
}
else//a[i] < mn
{
int t = 0,mc = -1,mv = INT_MAX;
while(!s.empty() && a[s.top()] < ma)
{
ans++;
mc = max(mc,a[s.top()]);
mv = min(mv,a[s.top()]);
t = a[s.top()];
s.pop();
}
if (a[i - 1] == mc && mv == t)
{
ans = ans - i + s.top() + 2;
}
if (!s.empty())
{
ans++;
}
mn = ma = a[i];
s.push(i);
}
}
cout << ans << endl;
return 0;
}
隐约感觉思路有问题,不奇怪地WA了。