单调栈
#include <iostream>
#include <cstdio>
using namespace std;
long long n, a1[80010], p1[80010], p, ans;
int main(){
scanf("%lld", &n);
for(int i = 1; i <= n; i ++) scanf("%lld", &a1[i]);
a1[++n] = 1e9+10;
for(int i = 1; i <= n; i ++){
while(p && a1[p1[p]] <= a1[i]) ans += (i-p1[p]-1), p --;
p1[++p] = i;
}
printf("%lld", ans);
return 0;
}

本文介绍了一种使用单调栈解决特定问题的算法实现方法,并通过一个具体的C++代码示例展示了如何利用单调栈来高效地计算特定数值组合下元素间的特定关系。
568

被折叠的 条评论
为什么被折叠?



