Good Subarrays (Easy Version) (Codeforces 1736C1)
Tags: Others, schedules

This is the easy version of this problem. In this version, we do not have queries. Note that we have multiple test cases in this version. You can make hacks only if both versions of the problem are solved.An array $$$b$$$ of length $$$m$$$ is good if for all $$$i$$$ the $$$i$$$-th element is greater than or equal to $$$i$$$. In other words, $$$b$$$ is good if and only if $$$b_i \geq i$$$ for all $$$i$$$ ($$$1 \leq i \leq m$$$).You are given an array $$$a$$$ consisting of $$$n$$$ positive integers. Find the number of pairs of indices $$$(l, r)$$$, where $$$1 \le l \le r \le n$$$, such that the array $$$[a_l, a_{l+1}, \ldots, a_r]$$$ is good.

Input: Each test contains multiple test cases. The first line contains the number of test cases $$$t$$$ ($$$1 \leq t \leq 2 \cdot 10^5$$$). Description of the test cases follows.The first line of each test case contains an integer $$$n$$$ ($$$1 \leq n \leq 2 \cdot 10^5$$$), the length of the array $$$a$$$.The second line of each test case contains $$$n$$$ space-separated integers $$$a_1,a_2,\ldots,a_n$$$ ($$$1 \leq a_i \leq n$$$), representing the array $$$a$$$.It is guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: For each test case, print the number of suitable pairs of indices.

Note: In the first test case, all subarrays of $$$a$$$ are good, so all pairs are suitable.In the second test case, the pairs $$$(1, 1)$$$, $$$(2, 2)$$$, and $$$(3, 3)$$$ are suitable. For example, when $$$(l, r) = (1, 2)$$$, the array $$$b=[1,1]$$$ is not good because $$$b_2 < 2$$$.

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

Sample Outputs:
6
3
7

Solution (Python):
n = int(input())
h = []
for i in range(n):
    k = int(input())
    a = list(map(int, input().split()))
    j = 1
    l = 0
    l2 = 0
    ll = 0
    ll2 = 0
    for i in range(k):
        if a[i] >= j:
            l = l + 1
        else:
            j = a[i]
            if l % 2 == 0:
                ll = ll + (l + 1) * (l // 2)
            else:
                ll = ll + ((l + 1) * (l // 2) + l // 2 + 1)
            if l2 % 2 == 0:
                ll = ll - (l2 + 1) * (l2 // 2)
            else:
                ll = ll - ((l2 + 1) * (l2 // 2) + l2 // 2 + 1)
            l2 = a[i] - 1
            l = a[i]
        j = j + 1
    if l % 2 == 0:
        ll = ll + (l + 1) * (l // 2)
    else:
        ll = ll + ((l + 1) * (l // 2) + l // 2 + 1)
    if l2 % 2 == 0:
        ll = ll - (l2 + 1) * (l2 // 2)
    else:
        ll = ll - ((l2 + 1) * (l2 // 2) + l2 // 2 + 1)
    h.append(ll)
for t in h:
    print(t)

Solution (Python):
def sum(n):
    return (n + 1) * n // 2
t = int(input())
for _ in range(t):
    n = int(input())
    a = list(map(int, input().split()))
    (ans, now, i) = (0, 0, 0)
    for i in range(n):
        now += 1
        if a[i] < now:
            ans += sum(now - 1) - sum(a[i] - 1)
            now = a[i]
    ans += sum(now)
    print(ans)

Solution (Python):
for t in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    l = 0
    s = 0
    for r in range(n):
        if a[r] < r - l + 1:
            l = r - a[r] + 1
        s += r - l + 1
    print(s)