만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

재미있는 게임

시간 제한2초메모리 제한1024 MB

요약
1에서 시작해 수를 2배 하거나 1 더하는 게임을 상한 n 아래에서 할 때, 선공이 이기는 n이 [l, r]에 몇 개인지 구합니다.
난이도

보통10점 중 7점

유형
게임 이론, 수학, 동적 계획법
정답자
아직 제출이 없습니다

문제

스폰지밥과 뚱이는 한참 동안 무엇을 하며 놀지 정하지 못하고 있다. 징징이가 둘을 돕기 위해 게임을 하나 제안했다. 칠판에는 처음에 수 1이 적혀 있다. 각 차례에 플레이어는 칠판에 적힌 수를 지우고, 그 자리에 그 수의 두 배 또는 그 수에 1을 더한 값을 적는다. 예를 들어 3에서는 4와 6을 만들 수 있고, 5에서는 6 또는 10을 만들 수 있다.

게임을 시작할 때 상한 nn이 정해진다. 상한은 칠판에 적을 수 있는 가장 큰 수다. 예를 들어 n=9n = 9이고 칠판에 5가 적혀 있다면, 다음 차례에는 6만 적을 수 있다. 10은 10>910 > 9이므로 적을 수 없다.

움직일 수 없는 플레이어가 진다. 즉 차례가 왔을 때 칠판에 nn이 적혀 있으면 그 플레이어가 진다. 뚱이가 먼저 둔다.

게임을 여러 번 한 뒤 뚱이는 궁금한 점이 생겼다. ll부터 rr까지의 수 중에서 승리 수가 몇 개인지 알 수 있을까? 수 nn은 상한이 nn일 때 양쪽이 최적으로 두면 뚱이가 이기는 경우 승리 수다. 구간 [l,r][l, r]에 있는 승리 수의 개수를 구하는 것을 도와 달라.

입력

첫 번째이자 유일한 줄에 두 수 ll, rr이 주어진다 (1≤l≤r≤10181 \le l \le r \le 10^{18}). 두 수는 구간의 양 끝이다.

출력

구간 [l,r][l, r]에 있는 승리 수의 개수를 출력한다.

예제2

  1. 예제 1

    입력
    2 3
    
    예상 출력
    1
    
  2. 예제 2

    입력
    8 10
    
    예상 출력
    2