파이몬의 세그먼트 트리
시간 제한2초메모리 제한1024 MB
길이 n인 배열에 구간 덧셈이 m번 적용될 때, 인덱스 구간과 시점 구간에 걸친 a의 제곱합을 10^9+7로 나눈 나머지로 q개의 질의마다 구합니다.
문제
파이몬은 방금 지속성 세그먼트 트리를 배웠고, 바로 연습해 보려 한다. 그래서 루미네는 시작하기 좋은 쉬운 문제를 하나 준다.
길이가 인 수열 이 주어진다. 루미네는 이 수열에 번의 변경을 적용한다. 번째 변경은 세 정수 , ()와 로 주어지며, 인 모든 에 대해 를 로 바꾼다.
를 번째 변경 직후의 값이라고 하자. 이렇게 하면 의 과거 값을 모두 추적할 수 있다. 번째 변경이 를 건드리지 않았다면 는 과 같다. 완전성을 위해 은 의 초기 값으로 정의한다.
모든 변경이 끝난 뒤, 루미네는 파이몬에게 개의 질의를 준다. 번째 질의는 네 정수 , , , 로 주어지며, 다음 값을 구해야 한다.
모든 질의의 답을 구하라. 답이 매우 클 수 있으므로 각 답은 로 나눈 나머지로 출력한다.
입력
첫 줄에는 세 정수 , , ()가 주어진다. 각각 수열의 길이, 변경의 개수, 질의의 개수이다.
둘째 줄에는 초기 수열의 정수 개 ()이 주어진다.
다음 개 줄에는 각각 변경을 나타내는 , , (, )가 주어진다.
다음 개 줄에는 각각 질의를 나타내는 , , , (, )가 주어진다.
입력 파일에는 테스트 케이스가 하나만 있다.
출력
각 질의마다 답을 로 나눈 나머지를 한 줄에 출력한다.