만드는 중입니다

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

양갈래 바이러스

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

요약
완전 이진 트리 형태의 도시 N개에서 Q개의 바이러스가 출발 도시로부터 거리 d 이내의 도시에 각각 p만큼 감염 수치를 더할 때, 모든 도시의 최종 감염 수치를 구합니다.
난이도

보통10점 중 6점

유형
트리, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

여행을 다니던 무대소녀 나나는 어느 날 갈래 나라를 발견한다. 갈래 나라는 NN개의 도시로 이루어져 있고, ii (2≤i≤N2 \leq i \leq N)번째 도시와 ⌊i2⌋\left \lfloor \frac{i}{2} \right \rfloor번째 도시를 잇는 양방향 도로가 있다. N=2k−1N = 2^k - 1을 만족하는 양의 정수 kk가 존재한다. 즉, 갈래 나라는 포화 이진 트리 구조를 이룬다.

갈래 나라 국민 중에는 양갈래 머리를 한 사람이 한 명도 없었다. 충격을 받은 나나는 무대소녀로서의 일을 잠시 접고 QQ종류의 양갈래 바이러스를 만든다.

각 바이러스에는 위력 pp와 전염력 dd가 있다. 도시 vv에 뿌려진 바이러스는 vv에서 거리가 dd 이하인 도시를 감염시키며, 감염된 도시는 위력 pp만큼 감염도가 오른다. 도시 aa에서 도시 bb까지의 거리는 aa에서 bb로 가는 경로에서 거쳐야 하는 도로 개수의 최솟값이다.

도시의 감염도는 나나가 모든 바이러스를 뿌린 후, 그 도시를 감염시킨 바이러스 위력의 합이다. 한 도시는 두 종류 이상의 바이러스에 감염될 수 있다.

모든 바이러스를 뿌린 뒤 각 도시의 감염도를 출력하라.

입력

첫째 줄에 도시의 개수 NN (1≤N<262 144=2181\leq N < 262\,144 = 2^{18})과 바이러스의 개수 QQ (1≤Q≤200 0001 \leq Q \leq 200\,000)가 공백으로 구분되어 주어진다.

둘째 줄부터 QQ개의 줄에는 바이러스 정보가 vv pp dd 형식으로 주어진다. 이는 vv (1≤v≤N1 \leq v \leq N)번째 도시에 위력 pp (1≤p≤1 0001 \leq p \leq 1\,000), 전염력 dd (0≤d≤(log⁡2(N+1)−1)×20 \leq d \leq (\log_2 (N + 1) - 1) \times 2)인 바이러스를 뿌린다는 뜻이다.

출력

각 도시의 감염도를 번호 순서대로 공백으로 구분하여 NN개의 수로 출력하라.

예제1

  1. 예제 1

    입력
    7 2
    2 3 2
    6 2 2
    
    예상 출력
    5 3 5 3 3 2 2