链接:https://ac.nowcoder.com/acm/contest/11169/A

题目描述
爱德华以钢之炼金术师之名享誉全国,而今天他要完成弟弟阿尔冯斯提出的一个挑战。

已知爱德华和阿尔冯斯面前各摆了一块无限长的画布,画布上一开始均无任何颜色,且两块画布的最左端下标均设为00。阿尔冯斯将使用nn次炼金术,第ii次炼金术会使他面前画布的[0,a_{i}][0,a
i

]区间染成第ii种颜色。

在阿尔冯斯使用完nn次炼金术后,爱德华也会使用若干次炼金术,每次炼金术他可以选择[1,n][1,n]中的任意一种颜色,以及任意的一个右端点rr,将该画布的[0,r][0,r]区间染成此次选择的颜色。

规定后面的染色会覆盖前面的染色,比如先将[0,2][0,2]区间染成第22种颜色,再将[0,1][0,1]区间染成第33种颜色,则此时[0,1][0,1]区间的颜色是第3种颜色。

请问爱德华最少要使用多少次炼金术,才能把他面前的画布变成和阿尔冯斯的画布一样。
思路:
从后往前面遍历数组,如果当前的染***a[i]域大于后面染***域a[i + 1]且a[i]大于后面染***域的最大值,则cnt++,数组下标从1道n,我们从n-1开始往前面扫,cnt初始等于1,tmp(用来记住后面最大的染***域)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll,LL;
using namespace std;
const int maxn = 1e6 + 7;

ll n, a[maxn];

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >>a[i];
    ll cnt = 1, tmp = a[n];
    for(int i = n - 1; i >= 1; i--) {
        if(a[i] > a[i + 1] && a[i] > tmp) cnt++, tmp = a[i];
    }
    cout << cnt << endl;
    return 0;
}