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

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

공책

시간 제한1초메모리 제한128 MB

요약
짝수는 2로 나누고 임의의 두 수는 xor할 수 있는 연산으로 닫힌 집합에서 만들 수 있는 가장 작은 값을 구하고, 갱신이 있는 구간 질의에 답한다.
난이도

어려움10점 중 9점

유형
수학, 비트 연산, 세그먼트 트리, 정수론
정답자
아직 제출이 없습니다

문제

Ivan은 공책에 숫자를 적는다. 처음에 정수 집합 SS가 공책에 적혀 있다. 그다음부터는 다음 연산으로 공책에 새 숫자를 적을 수 있다.

  • xx가 적혀 있으면 2x2x를 적을 수 있다.
  • xx가 적혀 있고 xx가 22로 나누어떨어지면 x2\frac{x}{2}를 적을 수 있다.
  • 서로 다른 두 수 xx와 yy가 적혀 있으면 x xor yx \text{ xor } y를 적을 수 있다.

시작 집합 SS에 대해 Ivan이 공책에 적을 수 있는 가장 작은 수를 f(S)f(S)라고 하자.

길이가 NN인 배열과 QQ개의 질의가 주어진다. 각 질의는 다음 중 하나다.

  • a[x]a[x]의 값을 yy로 바꾼다.
  • f({a[L],a[L+1],⋯ ,a[R]})f(\{a[L],a[L+1],\cdots,a[R]\})의 값을 구한다.

입력

첫째 줄에 NN이 주어진다 (N≤100000N\leq 100000). NN은 배열의 길이이다.

둘째 줄에 NN개의 정수 a[1],a[2],⋯ ,a[N]a[1],a[2],\cdots,a[N]이 주어진다 (0<a[i]<2620<a[i]<2^{62}). 이는 배열 aa의 원소이다.

셋째 줄에 QQ가 주어진다 (Q≤100000Q\leq 100000). QQ는 질의의 수이다.

다음 QQ개의 줄에 질의가 주어진다. 질의는 "11 xx yy" 형식으로 a[x]a[x] (1≤x≤N1\leq x\leq N)를 yy (0<y<2620<y<2^{62})로 바꾸라는 것일 수도 있고, "22 ll rr" 형식으로 f({a[L],a[L+1],⋯ ,a[R]})f(\{a[L],a[L+1],\cdots,a[R]\})의 값을 구하라는 것일 수도 있다 (1≤L≤R≤N1\leq L\leq R\leq N).

출력

두 번째 형식의 질의마다 f({a[L],a[L+1],⋯ ,a[R]})f(\{a[L],a[L+1],\cdots,a[R]\})의 값을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3
    3 5 15
    3
    2 1 3
    1 2 11
    2 1 2
    
    예상 출력
    3
    1