Luyện đề Cấu trúc dữ liệu – Minh Tâm (T4 28/10/2026)
Cộng đoạn, tổng đoạn
Nộp bàiPoint: 100
📖 Bài giảng & lời giải: đây là Bài tập 8 trong bài giảng Bài 31: Fenwick, Segment Tree trên blog Lập trình thuật toán – có lý thuyết, mô phỏng từng bước, gợi ý và code C++ / Python.
⚠️ Lưu ý: hãy đảm bảo em đã thật sự cố gắng tự làm bài trước, rồi mới xem gợi ý và lời giải nhé!
🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên
📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com
Cho dãy $n$ số nguyên $a_1, a_2, \ldots, a_n$. Có $q$ thao tác theo thứ tự, mỗi thao tác thuộc một trong hai loại:
1 l r x: cộng $x$ vào mọi phần tử $a_l, a_{l+1}, \ldots, a_r$;2 l r: in ra tổng $a_l + a_{l+1} + \cdots + a_r$ hiện tại.
Dữ liệu vào
- Dòng 1: hai số nguyên $n, q$ ($1 \le n, q \le 2 \cdot 10^5$).
- Dòng 2: $n$ số nguyên $a_1, a_2, \ldots, a_n$ ($|a_i| \le 10^9$).
- $q$ dòng tiếp theo, mỗi dòng là một thao tác dạng
1 l r x($1 \le l \le r \le n$, $|x| \le 10^6$) hoặc2 l r($1 \le l \le r \le n$).
Dữ liệu bảo đảm có ít nhất một thao tác loại 2.
Kết quả
Với mỗi thao tác loại 2, theo đúng thứ tự, in ra tổng tìm được trên một dòng (chú ý kết quả có thể vượt quá phạm vi kiểu int).
Sample Input
8 3
3 1 4 1 5 9 2 6
1 2 7 2
2 4 5
2 1 8
Sample Output
10
43
Bật tắt đèn (cây phân đoạn)
Nộp bàiPoint: 100
📖 Bài giảng & lời giải: đây là Bài tập 6 trong bài giảng Bài 37: Sparse Table, Lazy trên blog Lập trình thuật toán – có lý thuyết, mô phỏng từng bước, gợi ý và code C++ / Python.
⚠️ Lưu ý: hãy đảm bảo em đã thật sự cố gắng tự làm bài trước, rồi mới xem gợi ý và lời giải nhé!
🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên
📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com
Có một dãy $n$ bóng đèn, trạng thái ban đầu cho bằng một xâu nhị phân độ dài $n$: ký tự thứ $i$ là 1 nếu bóng $i$ đang sáng, 0 nếu đang tắt. Có $q$ thao tác, mỗi thao tác thuộc một trong hai loại:
1 l r: bấm công tắc mọi bóng từ $l$ tới $r$ (bóng sáng thành tắt, bóng tắt thành sáng);2 l r: in số bóng đang sáng trong đoạn $[l, r]$.
Dữ liệu vào
- Dòng 1: hai số nguyên $n, q$ ($1 \le n, q \le 10^5$).
- Dòng 2: xâu nhị phân độ dài $n$.
- $q$ dòng tiếp theo, mỗi dòng là một thao tác dạng
1 l rhoặc2 l r($1 \le l \le r \le n$).
Kết quả
Với mỗi thao tác loại 2, in kết quả trên một dòng. Dữ liệu bảo đảm có ít nhất một thao tác loại 2.
Sample Input
6 5
101100
2 1 6
1 1 4
2 1 6
1 3 6
2 2 5
Sample Output
3
1
4
Đếm cặp XOR nhỏ hơn k
Nộp bàiPoint: 100
📖 Bài giảng & lời giải: đây là Bài tập 8 trong bài giảng Bài 39: Z, Manacher, Trie trên blog Lập trình thuật toán – có lý thuyết, mô phỏng từng bước, gợi ý và code C++ / Python.
⚠️ Lưu ý: hãy đảm bảo em đã thật sự cố gắng tự làm bài trước, rồi mới xem gợi ý và lời giải nhé!
🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên
📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com
Cho dãy $n$ số nguyên không âm $a_1, a_2, \ldots, a_n$ và số nguyên $k$. Hãy đếm số cặp chỉ số $(i, j)$ với $1 \le i \lt j \le n$ và $a_i \oplus a_j \lt k$ (trong đó $\oplus$ là phép XOR theo bit).
Dữ liệu vào
- Dòng 1: hai số nguyên $n, k$ ($1 \le n \le 10^5$, $1 \le k \le 2^{30}$).
- Dòng 2: $n$ số nguyên $a_1, a_2, \ldots, a_n$ ($0 \le a_i \lt 2^{30}$).
Kết quả
In ra một số nguyên là số cặp thoả mãn (kết quả có thể vượt kiểu int).
Sample Input
5 3
1 2 3 4 5
Sample Output
3
Bàn bật nảy
Nộp bàiPoint: 100
📖 Bài giảng & lời giải: đây là Bài tập 8 trong bài giảng Bài 38: Chia căn, thuật toán Mo trên blog Lập trình thuật toán – có lý thuyết, mô phỏng từng bước, gợi ý và code C++ / Python.
⚠️ Lưu ý: hãy đảm bảo em đã thật sự cố gắng tự làm bài trước, rồi mới xem gợi ý và lời giải nhé!
🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên
📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com
Có $n$ ô xếp thành một hàng, đánh số từ $1$ tới $n$. Ô thứ $i$ có một lò xo độ mạnh $a_i$ ($a_i \ge 1$): viên bi rơi vào ô $i$ sẽ bật sang ô $i + a_i$; nếu chỉ số này vượt quá $n$ thì bi rời khỏi bàn. Có $q$ thao tác, mỗi thao tác thuộc một trong hai loại:
0 i x: đổi độ mạnh lò xo ở ô $i$ thành $x$;1 i: thả một viên bi vào ô $i$; in ra ô cuối cùng viên bi chạm vào trước khi rời bàn và số lần bật (tính cả lần bật ra khỏi bàn).
Dữ liệu vào
- Dòng 1: hai số nguyên $n, q$ ($1 \le n, q \le 10^5$).
- Dòng 2: $n$ số nguyên $a_1, a_2, \ldots, a_n$ ($1 \le a_i \le n$).
- $q$ dòng tiếp theo, mỗi dòng là một thao tác dạng
0 i x($1 \le i \le n$, $1 \le x \le n$) hoặc1 i($1 \le i \le n$).
Kết quả
Với mỗi thao tác loại 1, in trên một dòng hai số nguyên cách nhau một dấu cách: chỉ số ô cuối cùng bi chạm vào và số lần bật. Dữ liệu bảo đảm có ít nhất một thao tác loại 1.
Sample Input
8 4
1 2 1 3 1 2 1 1
1 1
0 4 5
1 1
1 6
Sample Output
8 5
4 3
8 2