fork download
  1. l, r = input().split(' ')
  2. l = int(l)
  3. r = int(r)
  4.  
  5. w1 = 0
  6. w2 = 0
  7. d = 1
  8. cur = 0
  9. q = 1
  10. while cur + d < l:
  11. if q == 1:
  12. w1 += d
  13. else:
  14. w2 += d
  15. cur += d
  16. d = d * 2
  17. q = 1 - q
  18.  
  19. arr = {{0, 0}, {0, 0}}
  20. arr[0][0] = w2
  21. arr[0][1] = w1
  22.  
  23. if cur + d <= r:
  24. w = cur + d - l + 1
  25. if q == 1:
  26. w1 += d - w
  27. else:
  28. w2 += d - w
  29. arr[0][0] = w2
  30. arr[0][1] = w1
  31. if q == 1:
  32. w1 += w
  33. else:
  34. w2 += w
  35. cur += d
  36. d = d * 2
  37.  
  38. q = 1 - q
  39. while cur + d <= r:
  40. if q == 1:
  41. w1 += d
  42. else:
  43. w2 += d
  44. cur += d
  45. d = d * 2
  46. q = 1 - q
  47.  
  48. if cur != r:
  49. if q == 1:
  50. w1 += r - cur
  51. else:
  52. w2 += r - cur
  53.  
  54.  
  55.  
  56. else:
  57. if q == 1:
  58. w1 += l - cur - 1
  59. else:
  60. w2 += l - cur - 1
  61.  
  62. arr[0][0] = w2
  63. arr[0][1] = w1
  64.  
  65. if q == 1:
  66. w1 += r - l + 1
  67. else:
  68. w2 += r - l + 1
  69.  
  70. arr[1][0] = w2
  71. arr[1][1] = w1
  72.  
  73. M = 1000000007
  74.  
  75. ans = (arr[1][0] % M * (arr[1][0] + 1) % M) % M
  76. ans -= (arr[0][0] % M * (arr[0][0] + 1) % M) % M
  77.  
  78. ans += (arr[1][1] % M * (arr[1][1] + 1) % M) % M - arr[1][1]
  79. ans = ans % M
  80. ans -= ((arr[0][1] % M * (arr[0][1] + 1) % M) % M - arr[0][1])
  81.  
  82. ans = ans % M
  83.  
  84. print(ans)
Runtime error #stdin #stdout #stderr 0.01s 27648KB
stdin
1 3
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 19, in <module>
TypeError: unhashable type: 'set'