# 1. Find all triplets d[a] < d[b] < d[c] where d[a] + d[b] + d[c] <= t.from bisect import bisect_rightdef function(d, t): N = len(d) res = 0 for i in range(1, N): prev = d[i - 1] left = i right = N - 1 while left < right: total = prev + d[left] + d[right] if total <= t: res += right - left left += 1 else: target = t - prev - d[left] right = bisect_right(d, target) - 1 return res
# 2. Inversions of length 3 -> # of decreasing subsequences of length 3 in arrdef function(arr): N = len(arr) dp = [0] * N for i in range(N): for j in range(i + 1, N): dp[i] = int(arr[i] > arr[j]) return sum(dp[j] for i in range(N) for j in range(i + 1, N) if arr[i] > arr[j])