아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Spacery po drzewie binarnym

면접 대비

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

요약
무한 이진 트리에서 두 노드 번호가 주어질 때 두 노드를 잇는 최단 경로의 간선 수를 각 질의마다 구한다.
난이도

보통10점 중 5점

유형
트리, 수학, 구현
정답자
아직 제출이 없습니다

문제

Przypomnijmy jak wygląda drzewo binarne. Węzły tego drzewa będziemy numerowali kolejnymi liczbami naturalnymi od 1, idąc kolejnymi poziomami od góry do dołu poczynając od korzenia (wierzchołka na samej górze), a na każdym poziomie od lewej do prawej:

Drzewo binarne narysowane do węzła nr 18. Zwróć uwagę, że drzewo ma więcej niż 18 węzłów.

W tym zadaniu będziemy rozpatrywali najkrótsze ścieżki pomiędzy dwoma węzłami. Przykładowo, najkrótsza ścieżka między węzłami numer 8 oraz 5 ma trzy krawędzie i przebiega przez węzły 4 oraz 2.

Napisz program, który wczyta zapytania dotyczące ścieżek pomiędzy dwoma węzłami drzewa, dla każdego z nich wyznaczy długość najkrótszej ścieżki między tymi węzłami i wypisze wyniki na standardowe wyjście.

입력

W pierwszym wierszu wejścia znajduje się jedna liczba naturalna Q (1 ≤ Q ≤ 100 000), określająca liczbę zapytań. W kolejnych Q wierszach znajdują się zapytania, po jednym w wierszu. Opis każdego zapytania składa się z dwóch liczb naturalnych Ai oraz Bi (1 ≤ Ai, Bi ≤ 1018), oddzielonych pojedynczym odstępem i określających numery węzłów, dla których należy wyznaczyć ścieżkę.

출력

Twój program powinien wypisać na wyjście Q wierszy. W i-tym z nich powinna się znaleźć liczba całkowita – liczba krawędzi, które należy pokonać, aby przedostać się w drzewie z węzła o numerze Ai do węzła Bi.

예제4

  1. 예제 1

    입력
    3
    8 5
    6 7
    4 1
    
    예상 출력
    3
    2
    2
    
  2. 예제 2

    입력
    1
    1 1000
    
    예상 출력
    9
    
  3. 예제 3

    입력
    4
    10 20
    20 10
    10 1
    1 10
    
    예상 출력
    1
    1
    3
    3
    
  4. 예제 4

    입력
    1
    1000000000 5000000000
    
    예상 출력
    61