题目:http://poj.org/problem?id=3250
分析: 我次偶, 很久没学习, 看个英语都头疼, 题目很有意思, 一个序列, 从第一个元素开始(左->右), 向右看, 每个元素最对可以看到几个, 最后相加 。 也可以理解成每个元素被看到几次, 设置一个栈, 优胜劣汰, 看不到低的, 高的肯定看不到。
#include#include using namespace std;int main(){ int n; while(~scanf("%d", &n)){ int a; long long sum = 0; scanf("%d", &a); stack S; S.push(a); for(int i = 1; i < n; i++){ scanf("%d", &a); while(!S.empty() && S.top() <= a) S.pop(); sum += S.size(); S.push(a); } printf("%lld\n", sum); } return 0;}