fork download
  1. def main(arr, mink, maxk):
  2. n = len(arr)
  3. minkIndex = -1
  4. maxkIndex = -1
  5. wall = -1
  6. ans = 0
  7.  
  8. for i in range(n):
  9. ele = arr[i]
  10.  
  11. # 1. The Wall Condition
  12. if (ele < mink or maxk < ele):
  13. if minkIndex != -1 and maxkIndex != -1:
  14. x = min(minkIndex, maxkIndex) - wall - 1
  15. y = i - max(minkIndex, maxkIndex) - 1
  16. ans += (x + y + 1 + x * y)
  17.  
  18. wall = i
  19. minkIndex = -1
  20. maxkIndex = -1
  21.  
  22. else:
  23. # 2. Harmless Padding
  24. if (mink < ele and ele < maxk):
  25. continue
  26.  
  27. # 3. The minK == maxK Custom Bypass Edge Case
  28. elif (mink == maxk and maxk == ele):
  29. x = i - wall - 1
  30. y = 0
  31. ans += (x + y + 1 + x * y)
  32.  
  33. # 4. Standard Anchor Shifts
  34. else:
  35. if ele == mink:
  36. if maxkIndex == -1:
  37. minkIndex = i
  38. elif maxkIndex != -1 and minkIndex == -1:
  39. minkIndex = i
  40. else:
  41. x = min(minkIndex, maxkIndex) - wall - 1
  42. y = i - max(minkIndex, maxkIndex) - 1
  43. ans += (x + y + 1 + x * y)
  44. minkIndex = i
  45.  
  46. else: # ele == maxk
  47. if minkIndex == -1:
  48. maxkIndex = i
  49. elif minkIndex != -1 and maxkIndex == -1:
  50. maxkIndex = i
  51. else:
  52. x = min(minkIndex, maxkIndex) - wall - 1
  53. y = i - max(minkIndex, maxkIndex) - 1
  54. ans += (x + y + 1 + x * y)
  55. maxkIndex = i
  56.  
  57. # 5. Final Cliff Edge Tally
  58. if minkIndex != -1 and maxkIndex != -1:
  59. x = min(minkIndex, maxkIndex) - wall - 1
  60. y = n - 1 - max(minkIndex, maxkIndex)
  61. ans += (x + y + 1 + x * y)
  62.  
  63. return ans
Success #stdin #stdout 0.09s 14156KB
stdin
Standard input is empty
stdout
Standard output is empty