1994C - Hungry Games - CodeForces Solution


binary search data structures dp two pointers

Please click on ads to support us..

Python Code:

import bisect

for _ in range(int(input())):
    n, x = map(int, input().split())
    a = list(map(int, input().split()))
    p = [0] * (n + 1)
    d = [0] * (n + 3)
    
    for i in range(n):
        p[i + 1] = p[i] + a[i]
    
    res = 0
    for i in range(n - 1, -1, -1):
        v = p[i] + x
        idx = bisect.bisect_left(p, v)
        
        if idx > n:
            d[i] += (n - i)
        elif v == p[idx]:
            d[i] += (idx - i) + (d[idx + 1] if idx + 1 < n + 3 else 0)
        else:
            d[i] += (idx - i - 1) + (d[idx] if idx < n + 3 else 0)
    
    res = sum(d[:n])
    print(res)


Comments

Submit
0 Comments
More Questions

156C - Cipher
545D - Queue
459B - Pashmak and Flowers
1538A - Stone Game
1454C - Sequence Transformation
165B - Burning Midnight Oil
17A - Noldbach problem
1350A - Orac and Factors
1373A - Donut Shops
26A - Almost Prime
1656E - Equal Tree Sums
1656B - Subtract Operation
1656A - Good Pairs
1367A - Short Substrings
87A - Trains
664A - Complicated GCD
1635D - Infinite Set
1462A - Favorite Sequence
1445B - Elimination
1656C - Make Equal With Mod
567A - Lineland Mail
1553A - Digits Sum
1359B - New Theatre Square
766A - Mahmoud and Longest Uncommon Subsequence
701B - Cells Not Under Attack
702A - Maximum Increase
1656D - K-good
1426A - Floor Number
876A - Trip For Meal
1326B - Maximums