Problem:
Score : 300 points

Problem Statement

Given is a permutation P_1, \ldots, P_N of 1, \ldots, N.
Find the number of integers i (1 \leq i \leq N) that satisfy the following condition:

For any integer j (1 \leq j \leq i), P_i \leq P_j.

Constraints

1 \leq N \leq 2 \times 10^5

P_1, \ldots, P_N is a permutation of 1, \ldots, N.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
P_1 ... P_N

Output

Print the number of integers i that satisfy the condition.

Sample Input 1

5
4 2 5 1 3

Sample Output 1

3

i=1, 2, and 4 satisfy the condition, but i=3 does not - for example, P_i > P_j holds for j = 1.

Similarly, i=5 does not satisfy the condition, either. Thus, there are three integers that satisfy the condition.

Sample Input 2

4
4 3 2 1

Sample Output 2

4

All integers i (1 \leq i \leq N) satisfy the condition.

Sample Input 3

6
1 2 3 4 5 6

Sample Output 3

1

Only i=1 satisfies the condition.

Sample Input 4

8
5 7 4 2 6 8 1 3

Sample Output 4

4

Sample Input 5

1
1

Sample Output 5

1

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::io::Read;

fn main() {
    let mut buf = String::new();
    std::io::stdin().read_to_string(&mut buf).unwrap();

    let answer = solve(&buf);

    println!("{}", answer);
}

fn solve(input: &str) -> String {
    let mut iter = input.split_whitespace();

    let n: usize = iter.next().unwrap().parse().unwrap();

    let p: Vec<u32> = iter.map(|it| it.parse().unwrap()).collect();

    let mut mins: Vec<u32> = Vec::with_capacity(n);
    let mut min = p[0];
    mins.push(min);
    for i in 1..n {
        let pi = p[i];
        if pi < min {
            min = pi;
        }
        mins.push(min);
    }

    let mut count = 0;
    for i in 0..n {
        let pi = p[i];
        if pi <= mins[i] {
            count += 1;
        }
    }

    return count.to_string();
}

#[test]
fn test() {
    assert_eq!(solve(r"5
    4 2 5 1 3"), "3");
    assert_eq!(solve(r"4
    4 3 2 1"), "4");
    assert_eq!(solve(r"6
    1 2 3 4 5 6"), "1");
    assert_eq!(solve(r"8
    5 7 4 2 6 8 1 3"), "4");
    assert_eq!(solve(r"1
    1"), "1");
}