# 1395. Count Number of Teams
"""
there are 'n' soldiers standing in a line. each soldier is assigned a unique
'rating' value. you have to form a team of 3 soldiers amongst them under the
following rules
- choose 3 soldiers with index '(i, j, k)' with rating '(rating[i],
rating[j], rating[k])'
- a team is valid if '(rating[i] < rating[j] < rating[k])' or '(rating[i] >
rating[j] > rating[k])' where '(0 <= i < j < k < n))' return the number of
teams you can form given the conditions (soldiers can be part of multiple
teams)
"""
class Solution(object):
def numTeams(self, rating):
"""
:type rating: List[int]
:rtype: int
"""
asc, dsc = 0, 0
for i, v in enumerate(rating):
llc, rgc, lgc, rlc = 0, 0, 0, 0
for l in rating[:i]:
if l < v:
llc += 1
if l > v:
lgc += 1
for r in rating[i + 1 :]:
if r > v:
rgc += 1
if r < v:
rlc += 1
asc += llc * rgc
dsc += lgc * rlc
return asc + dsc
if __name__ == "__main__":
obj = Solution()
print(obj.numTeams(rating=[2, 5, 3, 4, 1]))
print(obj.numTeams(rating=[2, 1, 3]))
print(obj.numTeams(rating=[1, 2, 3, 4]))