#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll MOD = 1000000007; struct Node { int idx; int r; Node(int idx = -1, int r = -1) { this->idx = idx; this->r = r; } bool operator>(const Node &n) const { return r < n.r; } }; int main() { int N; cin >> N; priority_queue , greater> pque; for (int i = 1; i <= N - 1; ++i) { int r; cin >> r; pque.push(Node(i, r)); } int ans = 0; int cur = N; while (cur > 1) { int next = N; while (not pque.empty() && cur <= pque.top().r) { Node node = pque.top(); next = min(next, node.idx); pque.pop(); } cur = next; ++ans; } cout << ans << endl; return 0; }