만드는 중입니다

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

1차원 스프레드시트

시간 제한10초메모리 제한512 MB

요약
n개의 셀은 숫자를 담거나 다른 셀을 가리키며, 값 설정, 링크 설정, 구간 합 질의를 차례로 처리합니다.
난이도

어려움10점 중 8점

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

문제

여름 방학 동안 대형 소프트웨어 회사에서 인턴으로 일하게 되었다. 배정된 프로젝트는 새로 개발 중인 최신 애플리케이션인 1차원 스프레드시트이다.

1차원 스프레드시트는 1부터 nn까지 번호가 붙은 nn개의 셀로 이루어진 배열이다. 셀 ii에는 정수 aia_i가 들어 있거나, 다른 셀 lil_i를 가리키는 링크가 들어 있다. 후자의 경우 셀 ii가 셀 lil_i에 링크되어 있다고 한다. 순환 링크는 허용되지 않는다. 즉, 어떤 시점에도 셀 i1i_1이 i2i_2에, ..., 셀 iki_k가 i1i_1에 링크되는 셀들의 수열 i1,i2,…,iki_1, i_2, \ldots, i_k는 존재하지 않는다.

셀의 값은 다음과 같이 정의된다. 셀 ii에 수 aia_i가 있으면 value(i)=aivalue(i) = a_i이다. 그렇지 않으면 value(i)=value(li)value(i) = value(l_i)이다. 셀의 값을 구하려면 그 셀에서 시작해 링크를 따라가서 수가 들어 있는 셀에 도달하면 된다. 순환이 없으므로 모든 셀의 value(i)value(i)는 언제나 하나로 정해진다.

동료 Bill은 범위 합 기능을 구현했다. 사용자는 ∑i=lrvalue(i)\sum_{i = l}^{r} value(i)를 구할 수 있고, 셀의 내용을 바꿀 수도 있다. 그런데 성능 테스트 결과 Bill의 구현이 느린 것으로 드러났다. 이 스프레드시트의 질의 列을 처리하는 프로그램을 작성하라.

입력

첫 줄에 셀의 개수 nn과 질의의 개수 qq가 공백으로 구분되어 주어진다(1≤n,q≤2⋅1051 \le n, q \le 2 \cdot 10^5).

둘째 줄에는 nn개의 정수 a1,…,ana_1, \ldots, a_n이 주어진다(−104≤ai≤104-10^4 \le a_i \le 10^4). 이것은 셀의 초기 값이다. 처음에는 링크가 들어 있는 셀이 없다.

이어지는 qq줄에는 다음 중 하나의 형식으로 질의가 주어진다.

  • set i x: 셀 ii에 수 xx를 넣는다(−104≤x≤104-10^4 \le x \le 10^4).
  • link i j: 셀 ii에 셀 jj로의 링크를 넣는다.
  • sum l r: ∑i=lrvalue(i)\sum_{i = l}^{r} value(i)를 구한다.

어느 시점에도 순환하는 의존 관계가 생기지 않는다고 보장된다.

출력

sum l r 질의마다 답을 한 줄에 하나씩, 입력에 나온 순서대로 출력한다.

예제1

  1. 예제 1

    입력
    5 7
    1 2 3 4 5
    sum 1 5
    link 3 5
    link 1 3
    link 4 2
    sum 1 5
    set 5 -1
    sum 1 5
    
    예상 출력
    15
    19
    1