单调栈顾名思义就是栈内元素单调递增或者单调递减
我们以这一题为例
#include<cstdio>
#include<stack>
using std::stack;
//每当元素入栈时就让ans+=s.size()
int main()
{
int n,i;
int temp;
long long ans = 0;
scanf("%d",&n);
stack<int> s;
for(i = 0;i<n;i++)
{
scanf("%d",&temp);
if(s.size()==0)
{
ans+=s.size();
s.push(temp);
}
else
{
if(temp<s.top())
{
ans+=s.size();
s.push(temp);
}
else
{
while(s.size()!=0 && s.top()<temp)
s.pop();
ans+=s.size();
s.push(temp);
}
}
}
printf("%lld",ans);
return 0;
}