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

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

Pinezki

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

요약
구간 [0,3N]을 세 등분해 양 끝 부분만 재귀적으로 나누며 핀을 꽂을 때, K번째 핀의 위치를 구하거나 없으면 NIE를 출력한다.
난이도

보통10점 중 7점

유형
재귀, 분할 정복, 수학, 이분 탐색
정답자
아직 제출이 없습니다

문제

Bajtosia wbija pinezki w oś liczbową – dokładniej mówiąc, wybiera sobie pewne N i wbija pinezki w swój ulubiony odcinek [0, 3N] na osi. Pierwsze dwie pinezki trafiają na na początek i koniec odcinka, a następnie Bajtosia działa według następującego planu:

Najpierw wbija nowe pinezki w jednej trzeciej długości od początku swojego odcinka oraz w jednej trzeciej długości od końca. Tak wyznaczone punkty dzielą odcinek na trzy części równej długości: lewą, środkową i prawą. Następnie Bajtosia powtarza cały proces najpierw dla części lewej (jej początek i koniec już ma zaznaczony), a potem dla części prawej (ale nie dla środkowej!). Po drodze w obu tych częściach pojawią się mniejsze części, w których Bajtosia będzie znowu powtarzać swój plan, i tak dopóki się da – ponieważ Bajtosia wbija pinezki tylko w punkty całkowite, nie będzie już dalej dzielić odcinków, które mają długość 1.

Końcowy układ pinezek otrzymany przez Bajtosię nazywa się fraktalem1.

Przykładowo, jeśli N = 3, na odcinku zaznaczone będą następujące punkty:

Bajtosia zastanawia się czy się nie pomyliła, sprawdzając dla różnych K pozycję K-tej pinezki od lewej. Pomożesz jej?

Napisz program, który wczyta wartość N oraz zapytania Bajtosi i dla każdego zapytania Ki wyznaczy, gdzie leży Ki-ta pinezka.

입력

W pierwszym wierszu wejścia znajduje się jedna liczba naturalna N (1 ≤ N ≤ 36). W drugim wierszu wejścia znajduje się jedna liczba naturalna Q (1 ≤ Q ≤ 200 000) określająca liczbę zapytań Bajtosi. W kolejnych Q wierszach znajduje się opis kolejnych zapytań, po jednym w wierszu. Opis każdego zapytania składa się z jednej liczby Ki (1 ≤ Ki ≤ 1018) określającej zapytanie Bajtosi jaka jest pozycja Ki-tej od lewej pinezki wbitej na jej odcinku. Wbite przez Bajtosię pinezki numerujemy kolejnymi liczbami naturalnymi zaczynając od 1.

출력

Twój program powinien wypisać dokładnie Q wierszy. W i-tym wierszu powinna się znaleźć odpowiedź dla i-tego zapytania Bajtosi – pozycja Ki-tej pinezki na odcinku. Jeżeli Bajtosia wbiła mniej niż Ki pinezek, zamiast tego należy wypisać (dla tego zapytania) odpowiedź NIE.

예제3

  1. 예제 1

    입력
    3
    3
    10
    2
    50
    
    예상 출력
    19
    1
    NIE
    
  2. 예제 2

    입력
    1
    3
    4
    5
    3
    
    예상 출력
    3
    NIE
    2
    
  3. 예제 3

    입력
    2
    2
    1
    1000000000000000000
    
    예상 출력
    0
    NIE