第一次听说有单调栈这个东西,其实单调栈跟单调队列差不多,栈中的元素也有单调性,就拿这题来说,我们需要维护一个严格单调递减的栈
sample:
6
10 3 7 4 12 2
栈中的变化如下:
10
10 3
10 7
10 7 4
12
12 2
stack<LL> s;
int main(){
int n;
while(scanf("%d",&n) !=-1){
int i,j;
while(!s.empty())s.pop();
LL a;
scanf("%I64d",&a);
s.push(a);
LL ans = 0;
for(i=2;i<=n;i++){
scanf("%I64d",&a);
while(!s.empty() && s.top()<=a){//维护一个严格单调递减的栈
s.pop();
}
ans += s.size();
s.push(a);
}
printf("%I64d\n",ans);
}
return 0;
}