Game on Permutation (Codeforces 1860C)
Tags: Greedy, games

Alice and Bob are playing a game. They have a permutation $$$p$$$ of size $$$n$$$ (a permutation of size $$$n$$$ is an array of size $$$n$$$ where each element from $$$1$$$ to $$$n$$$ occurs exactly once). They also have a chip, which can be placed on any element of the permutation.Alice and Bob make alternating moves: Alice makes the first move, then Bob makes the second move, then Alice makes the third move, and so on. During the first move, Alice chooses any element of the permutation and places the chip on that element. During each of the next moves, the current player has to move the chip to any element that is simultaneously to the left and strictly less than the current element (i. e. if the chip is on the $$$i$$$-th element, it can be moved to the $$$j$$$-th element if $$$j < i$$$ and $$$p_j < p_i$$$). If a player cannot make a move (it is impossible to move the chip according to the rules of the game), that player wins the game.Let's say that the $$$i$$$-th element of the permutation is lucky if the following condition holds:  if Alice places the chip on the $$$i$$$-th element during her first move, she can win the game no matter how Bob plays (i. e. she has a winning strategy). You have to calculate the number of lucky elements in the permutation.

Input: The first line contains a single integer $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases.The first line of each test case contains a single integer $$$n$$$ ($$$1 \le n \le 3 \cdot 10^5$$$) – the number of elements in the permutation.The second line contains $$$n$$$ integers $$$p_1, p_2, \dots, p_n$$$ ($$$1 \le p_i \le n$$$). All $$$p_i$$$ are distinct. The sum of $$$n$$$ over all test cases doesn't exceed $$$3 \cdot 10^5$$$.

Output: For each test case, print a single integer — the number of lucky elements in the permutation.

Note: In the first test case of the example, the $$$3$$$-rd element of the permutation is lucky.In the second test case of the example, there are no lucky elements.In the third test case of the example, the $$$2$$$-nd element of the permutation is lucky.In the fourth test case of the example, the $$$3$$$-rd and the $$$4$$$-th element of the permutation are lucky.

Sample Inputs:
4
3
2 1 3
2
2 1
3
1 2 3
4
2 1 4 3

Sample Outputs:
1
0
1
2

Solution (Python):
import sys
input = sys.stdin.readline

def readList():
    return list(map(int, input().split()))

def readInt():
    return int(input())

def readInts():
    return map(int, input().split())

def readStr():
    return input().strip()

def solve():
    (n, arr) = (readInt(), readList())
    (bound, mi, ans) = (n + 1, arr[0], 0)
    for i in range(1, n):
        if arr[i] > bound:
            continue
        if arr[i] < mi:
            mi = arr[i]
        else:
            ans += 1
            bound = arr[i]
    return ans
for _ in range(int(input())):
    print(solve())

Solution (Python):
def main():
    t = int(input())
    r = [str(solution(i, t)) for i in range(t)]
    print('\n'.join(r))

def solution(ti, tn):
    n = int(input())
    pp = list(map(int, input().split()))
    pp.append(n + 1)
    g = n
    l = n
    c = 0
    for i in range(n):
        if pp[i] < pp[g]:
            g = i
            continue
        if pp[i] < pp[l]:
            l = i
            c = c + 1
            continue
    return c
main()

Solution (Python):
import sys
input = sys.stdin.readline
print = sys.stdout.write
t = int(input())
ans = ['0'] * t
for k in range(t):
    n = int(input())
    dt = list(map(int, input().split()))
    cnt = 0
    (min0, min1) = (dt[0], float('inf'))
    for i in range(1, n):
        el = dt[i]
        if el < min0:
            min0 = el
        elif el < min1:
            min1 = el
            cnt += 1
    ans[k] = str(cnt)
print('\n'.join(ans))