Back to Blog

Blog note

VOI 2026, Bài 5

Lời giải VOI 2026, Bài 5

1. Tóm tắt đề

Cho cây NN đỉnh đánh số từ 11, đỉnh thứ ii có trọng số nguyên không âm AiA_i.

QQ truy vấn, truy vấn thứ t(1tQ)t (1 \leq t \leq Q) được mô tả bằng 33 số nguyên dương xt,yt,wtx_t, y_t, w_t với ý nghĩa là gán Ai=Ai%wtA_i = A_i \% w_t với mọi đỉnh ii nằm trên đường đi từ xtx_t đến yty_t.

Yêu cầu: Sau mỗi truy vấn thứ tt, in ra (A1%t)+(A2%t)++(An%t)(A_1 \% t) + (A_2 \% t) + \dots + (A_n \% t).

Giới hạn:

  • N,Q2×105N, Q \leq 2 \times 10^5.
  • 0Ai2×1050 \leq A_i \leq 2 \times 10^5.

Tính điểm:

  • Subtask 1(20%)1 (20\%): N,Q5000N, Q \leq 5000.
  • Subtask 2(20%)2 (20\%): Cây là đường thẳng 12N1 - 2 - \dots - NAi2A_i \leq 2.
  • Subtask 3(20%)3 (20\%): Cây là đường thẳng 12N1 - 2 - \dots - Nxt=ytx_t = y_t ở mọi truy vấn.
  • Subtask 4(20%)4 (20\%): Cây là đường thẳng 12N1 - 2 - \dots - N.
  • Subtask 5(20%)5 (20\%): Không có ràng buộc gì thêm.

2. Subtask 1

Duyệt trâu, độ phức tạp O(NQ)O(NQ).

3. Subtask 2

Dễ thấy từ truy vấn thứ 33 trở đi thì kết quả là cố định nên chỉ cần tính kết quả ở truy vấn 1,2,31, 2, 3.

4. Subtask 3

Ta có Ai%t=AiAit×tA_i \% t = A_i - \lfloor \frac{A_i}{t} \rfloor \times t nên ta chỉ cần tính tổng A1t++Ant\lfloor \frac{A_1}{t} \rfloor + \dots + \lfloor \frac{A_n}{t} \rfloor. Mặc khác có tối đa 2Ai2\sqrt{A_i} giá trị khác nhau của Ait\lfloor \frac{A_i}{t} \rfloor nên ta có thể cập nhật lại tổng dễ dàng. Độ phức tạp là O(NN)O(N \sqrt{N}).

5. Subtask 4

Sử dụng SegmentTree, mỗi nút quản lý min. Do mỗi lần chia lấy dư số đó giữ nguyên hoặc giảm đi ít nhất một nửa nên mỗi nút lá của SegmentTree được thăm không quá log(Ai)\log(A_i) lần. Từ đó ở truy vấn tt, nếu ta thấy min của nút hiện tại trên SegmentTree lớn hơn tt thì bỏ qua và không xét các nút con của nút đó nữa.

Sử dụng thêm FenwickTree để truy vấn f(x)f(x) là tổng các số AixA_i \leq xg(x)g(x) là số lượng số AixA_i \leq x. Nhận xét vì mỗi số thay đổi không quá log(Ai)\log(A_i) lần nên số lần cập nhật trên FenwickTree không quá NlogNN \log N.

Đặt f(l,r)=f(r)f(l1)f(l, r) = f(r) - f(l - 1)g(l,r)=g(r)g(l1)g(l, r) = g(r) - g(l - 1). Ở truy vấn thứ tt để lấy kết quả, ta lấy tổng:

f(0,t1)+f(t,2t1)t×g(t,2t1)+f(2t,3t1)2t×g(2t,3t1)+f(0, t - 1) + f(t, 2t - 1) - t \times g(t, 2t - 1) + f(2t, 3t - 1) - 2t \times g(2t, 3t - 1) + \dots

6. Subtask 5

Sử dụng HLD kết hợp với Subtask 4. Độ phức tạp O(Nlog2N)O(N \log^2 N).