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

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

구간 곱 구하기

면접 대비

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

요약
점이 바뀌는 수열에서 구간 곱을 1,000,000,007로 나눈 나머지를 구합니다.
난이도

보통10점 중 4점

유형
세그먼트 트리
정답자
아직 제출이 없습니다

문제

NN개의 수로 이루어진 수열이 있다. 이 수열은 중간에 원소가 자주 바뀌고, 그 사이사이에 어떤 구간의 곱을 구해야 한다.

예를 들어 수열이 1, 2, 3, 4, 5일 때 세 번째 수를 6으로 바꾸고 두 번째부터 다섯 번째까지의 곱을 구하면 240이다. 이어서 다섯 번째 수를 2로 바꾸고 세 번째부터 다섯 번째까지의 곱을 구하면 48이다.

수의 변경과 구간 곱 계산이 섞여서 주어질 때, 각 구간의 곱을 구하는 프로그램을 작성한다.

입력

첫째 줄에 수의 개수 NN(1≤N≤1,000,0001 \le N \le 1{,}000{,}000), 수를 바꾸는 횟수 MM(1≤M≤10,0001 \le M \le 10{,}000), 구간의 곱을 구하는 횟수 KK(1≤K≤10,0001 \le K \le 10{,}000)가 공백으로 구분되어 주어진다.

둘째 줄부터 NN개의 줄에 수열의 원소가 한 줄에 하나씩 순서대로 주어진다.

이어지는 M+KM + K개의 줄에는 세 정수 aa, bb, cc가 주어진다. aa가 1이면 bb번째 수를 cc로 바꾸고, aa가 2이면 bb번째 수부터 cc번째 수까지의 곱을 구한다. aa가 2인 줄에서는 b≤cb \le c이다.

입력으로 주어지는 모든 수는 0 이상 1,000,000 이하의 정수이다.

출력

곱을 구하라는 질의마다 한 줄씩, 주어진 순서대로 모두 KK줄을 출력한다. 각 줄에는 해당 구간의 곱을 1,000,000,007로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

    입력
    5 2 2
    1
    2
    3
    4
    5
    1 3 6
    2 2 5
    1 5 2
    2 3 5
    
    예상 출력
    240
    48
    
  2. 예제 2

    입력
    5 2 2
    1
    2
    3
    4
    5
    1 3 0
    2 2 5
    1 3 6
    2 2 5
    
    예상 출력
    0
    240