| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Query-Max | 100 (p) | 1.0s | 256M |
| 2 | Query-Max 2 | 100 (p) | 1.0s | 256M |
| 3 | Query-Sum | 100 (p) | 1.0s | 256M |
| 4 | Query-Sum 2 | 100 (p) | 1.0s | 256M |
| 5 | Diff-Query (version 1) | 100 (p) | 1.0s | 256M |
| 6 | Diff-Query (version 2) | 125 (p) | 3.0s | 256M |
| 7 | Query-Max 3 | 175 (p) | 1.0s | 256M |
| 8 | Query-Max 4 | 200 (p) | 1.0s | 256M |
| 9 | Khu Rừng 3 | 100 (p) | 1.0s | 256M |
| 10 | Khu Rừng 4 | 150 (p) | 1.5s | 1G |
| 11 | Khu Rừng 5 | 150 (p) | 2.0s | 256M |
| 12 | CSES - Hotel Queries | Truy vấn khách sạn | 100 (p) | 1.0s | 512M |
| 13 | List Removals | 100 (p) | 1.0s | 512M |
| 14 | Salary Queries | 100 (p) | 1.0s | 512M |
| 15 | Subarray Sum Queries | 125 (p) | 1.0s | 512M |
| 16 | Range Updates and Sums | 150 (p) | 1.0s | 512M |
| 17 | CSES - Polynomial Queries | 150 (p) | 1.0s | 256M |
| 18 | CSES - Range Queries and Copies | Truy vấn đoạn và bản sao | 200 (p) | 1.0s | 512M |
| 19 | SGAME4 | 200 (p) | 2.0s | 256M |
| 20 | Khu Rừng 6 | 300 (p) | 5.0s | 512M |
| 21 | IOI 2014 - Holiday | 300 (p) | 4.0s | 256M |
| 22 | IOI 2014 - Wall | 250 (p) | 3.0s | 256M |
Cho dãy \(A\) gồm \(N\) phần tử là các số nguyên dương \(A_1, A_2, ..., A_N\). Cho \(Q\) thao tác thực hiện lần lượt, thao tác thứ \(i\) sẽ có một trong hai loại như sau:
Yêu cầu: Thực hiện tất cả lần lượt \(Q\) thao tác, và in ra kết quả của thao tác loại \(2\).
Test 1
5 4
2 6 3 5 8
1 2 5 3
2 1 4
1 3 4 2
2 3 5
9
11
Cho dãy \(a\) gồm \(n\) phần tử là các số nguyên dương \(a_{1}, a_{2}, \ldots, a_{N}\). Cho \(q\) thao tác thực liện lần lượt, thao tác thứ \(i\) sẽ có một trong hai loại như sau:
Yêu cầu: Thực hiện tất cả lần lượt \(Q\) thao tác, và in ra kết quả của thao tác loại \(2\).
Test 1
3 4
2 3 1
1 3 2
2 2 3
1 3 5
2 1 4
3
5
Cho dãy \(A\) gồm \(N\) phần tử là các số nguyên dương \(A_1, A_2, ..., A_N\). Cho \(Q\) thao tác thực hiện lần lượt, thao tác thứ \(i\) sẽ có một trong hai loại như sau:
Yêu cầu
Thực hiện tất cả lần lượt \(Q\) thao tác, và in ra kết quả của thao tác loại \(2\).
Test 1
6 5
9 2 4 7 4 8
1 5 6
2 1 5
1 3 8
1 2 3
2 2 4
32
24
Cho dãy \(a\) gồm \(n\) phần tử là các số nguyên dương \(a_{1}, a_{2}, \ldots, a_{n}\). Cho \(q\) thao tác thực hiện lần lượt, thao tác thứ \(i\) sẽ có một trong hai loại như sau:
Yêu cầu: thực hiện tất cả lần lượt \(q\) thao tác, và in ra kết quả của thao tác loại \(2\).
Test 1
5 4
1 4 6 2 3
2 1 4
1 2 5 3
1 3 4 5
2 3 5
13
30
Cho dãy số \(A\) gồm \(N\) phần tử gồm các số nguyên dương \(A_1, A_2, ..., A_N\), và \(Q\) truy vấn, truy vấn thứ \(i\) gồm \(2\) số nguyên dương \(L_i, R_i\) \((1 \leq L_i \leq R_i \leq N)\).
Yêu cầu: Với mỗi truy vấn thứ \(i\), hãy đếm số phần tử phân biệt trong khoảng từ \(L_i\) tới \(R_i\).
Test 1
5 3
1 1 2 1 3
1 5
2 4
3 5
3
2
3
Cho dãy \(A\) gồm \(N\) phần tử là các số nguyên dương \(A_1, A_2, ..., A_N\). Cho \(Q\) thao tác, thao tác thứ \(i\) sẽ có một trong hai loại như sau:
Yêu cầu: Thực hiện tất cả \(Q\) thao tác, và in ra \(2\) kết quả của thao tác loại \(2\).
Gồm \(Q+2\) dòng:
Test 1
3 3
1 2 3
2 1 3
1 3 2
2 2 3
3 6
1 2
Cho dãy \(A\) gồm \(N\) phần tử là các số nguyên dương \(A_1, A_2, ..., A_N\) (\(A_i \leq 10^9\)). Cho \(Q\) thao tác thực liện lần lượt, thao tác thứ \(i\) sẽ có một trong \(4\) loại như sau:
Yêu cầu
Thực hiện tất cả lần lượt \(Q\) thao tác, và in ra kết quả của thao tác loại \(4\).
Test 1
3 6
2 3 1
1 3 2
2 2 1 3
3 1
4 1 3
1 4 5
4 2 4
3
5
Nên làm bài Query-Max 2 trước khi làm bài này.
Cho số nguyên \(A\) gồm \(N\) phần tử gồm các số nguyên dương \(A_1, A_2, ..., A_N\). Cho \(Q\) thao tác được thực hiện lần lượt bao gồm gán, truy vấn và quay lại: (Gọi \(T\) là số lần gán. Ban đầu \(T = 0\)).
Thực hiện lần lượt \(Q\) thao tác. Với thao tác loại \(2\) (Truy vấn), in ra kết quả.
Với thao tác loại \(2\), in ra kết quả trên một dòng.
Input:
5 8
1 5 4 7 8
1 3 2
2 2 4 0
1 1 5
1 4 6
2 1 5 2
2 3 4 3
3 1
2 3 4 1
Output:
7
8
6
7
Chúa đất vùng rừng AnLuuLand sau khi cho người anh hùng chọn một vùng đất đã nhận ra sai lầm của mình khi cho phép phá rừng để làm nương rẫy, làm giảm diện tích rừng gây ảnh hưởng lớn đến biến đổi khí hậu.
Để khắc phục hậu quả, chúa đất quyết định trồng cây vào khu vực trống trước đó. Khu vực trống có thể xem là một hình chữ nhật gồm \(m\) hàng và \(n\) cột. Ban đầu trên này chưa hề có cây. Chúa trồng lên mỗi ô một cây xanh, ban đầu mỗi cây cao \(1 cm\). Mỗi tuần chúa đất ra một trong hai lệnh theo thứ tự:
Sau \(k\) tuần thực hiện, chúa đất muốn biết về tình trạng độ cao của cây xanh ở các lệnh dạng \(2\) trong khu vực này. Nhiệm vụ của bạn thống kê điều đó cho chúa đất.
Test 1
4 5 5
1 1 1 4 5 1
2 1 3
1 1 1 2 2 2
2 1 2
2 4 5
2
4
2
Chúa đất vùng rừng AnLuuLand sau khi cho người anh hùng algorit chọn một vùng đất đã nhận ra sai lầm của mình khi cho phép phá rừng để làm nương rẫy, làm giảm diện tích rừng gây ảnh hưởng lớn đến biến đổi khí hậu.
Để khắc phục hậu quả, chúa đất quyết định trồng cây vào khu vực trống trước đó. Khu vực trống có thể xem là một hình chữ nhật gồm \(m\) hàng và \(n\) cột. Ban đầu trên này chưa hề có cây. Chúa trồng lên mỗi ô một cây xanh, ban đầu mỗi cây cao \(1cm\). Mỗi tuần chúa đất ra một trong hai lệnh theo thứ tự:
Sau \(k\) tuần thực hiện, chúa đất muốn biết về tình trạng độ cao của cây xanh ở các lệnh dạng \(2\) trong khu vực này. Nhiệm vụ của bạn thống kê điều đó cho chúa đất.
Test 1
4 5 5
1 1 1 4 5 1
2 1 3
1 1 1 2 2 2
2 1 2
2 4 5
2
4
2
Chúa đất vùng rừng AnLuuLand sau khi cho người anh hùng algorit chọn một vùng đất đã nhận ra sai lầm của mình khi cho phép phá rừng để làm nương rẫy, làm giảm diện tích rừng gây ảnh hưởng lớn đến biến đổi khí hậu.
Để khắc phục hậu quả, chúa đất quyết định trồng cây vào khu vực trống trước đó. Khu vực trống có thể xem là một hình chữ nhật gồm \(m\) hàng và \(n\) cột. Ban đầu trên này chưa hề có cây. Chúa trồng lên mỗi ô một cây xanh, ban đầu mỗi cây cao \(1 cm\). Mỗi tuần chúa đất ra một trong hai lệnh theo thứ tự:
Sau \(k\) tuần thực hiện, chúa đất muốn biết về tình trạng độ cao của cây xanh ở các lệnh dạng \(2\) trong khu vực này. Nhiệm vụ của bạn thống kê điều đó cho chúa đất.
Test 1
4 5 5
1 1 1 4 5 1
2 1 1 3 3
1 1 1 2 2 2
2 1 2 1 2
2 1 1 4 5
18
4
48
Có \(n\) khách sạn trên một con đường. Với mỗi khách sạn bạn biết được số phòng còn trống. Nhiệm vụ của bạn là chỉ định các phòng khách sạn cho \(m\) nhóm khách du lịch. Tất cả các thành viên trong cùng một nhóm muốn trọ chung một khách sạn.
Các nhóm sẽ lần lượt đến và bạn biết số phòng yêu cầu của mỗi nhóm. Với mỗi nhóm, bạn luôn tìm khách sạn đầu tiên mà đủ số phòng trống và chỉ định nhóm đấy vào phòng này. Sau đó, số phòng trống của khách sạn này sẽ giảm đi.
Test 1
8 5
3 2 4 1 5 5 2 6
4 4 7 1 1
3 5 0 1 1
Cho một mảng gồm \(N\) phần tử là các số nguyên. Nhiệm vụ của bạn là xoá phần tử trong mảng và báo cáo phần tử đã bị xoá.
Test 1
5
2 6 1 4 2
3 1 3 1 1
1 2 2 6 4
Khi thực hiện xóa lần lượt tại các vị trí, mảng sẽ thay đổi như sau \([2,6,1,4,2],[2,6,4,2],[6,4,2],[6,4],[4]\) và \([]\).
Một công ty có \(N\) nhân viên với với mức lương nhất định. Nhiệm vụ của bạn là theo dõi mức lương và thực hiện truy vấn.
Test 1
5 3
3 7 2 2 5
? 2 3
! 3 6
? 2 3
3
2
Cho một mảng bao gồm \(N\) số nguyên. Một số phần tử sẽ được cập nhật, và sau mỗi lần cập nhật, nhiệm vụ của bạn là tìm tổng lớn nhất của tất cả các đoạn con (liên tiếp) trong mảng.
Test 1
5 3
1 2 -3 5 -1
2 6
3 1
2 -2
9
13
6
Cho mảng gồm \(N\) phần tử là các số nguyên. Nhiệm vụ của bạn là xử lý các loại truy vấn sau:
Test 1
6 5
2 3 1 1 5 3
3 3 5
1 2 4 2
3 3 5
2 2 4 5
3 3 5
7
11
15
Bạn được cho một mảng \(a\) gồm \(n\) phần tử và \(q\) truy vấn. Có 2 loại truy vấn:
Test 1
5 3
4 2 3 1 7
2 1 5
1 1 5
2 1 5
17
32
Nhiệm vụ của bạn là duy trì một danh sách các mảng, danh sách ban đầu chỉ có một mảng duy nhất. Bạn phải xử lý các loại truy vấn sau:
1 k a x, 2 k a b hoặc 3 k.Test 1
5 6
2 3 1 2 5
3 1
2 1 1 5
2 2 1 5
1 2 2 5
2 1 1 5
2 2 1 5
13
13
13
15
Nông dân V.H.A có \(N\) khu vườn để chăn nuôi chú gà . Các khu vườn được kết nối với nhau bằng \(N-1\) con đường hai chiều, tức là chỉ có đúng một đường đi giữa hai khu vườn (giàu mà keo đây mà). Vì là một con gà béo tham lam nên đã đòi hỏi trên đường các con đường luôn phải có đồ ăn cho nó. Vì thế, V.H.A đã phải thực hiện các công việc sau:
P x y: V.H.A sẽ chọn ra hai khu vườn và bỏ 1 nồi thóc dọc theo con đường nối hai khu vườn.Q x y: V.H.A sẽ phải trả lời trên đoạn đường nối hai khu vườn có bao nhiêu nồi thóc.P x y hoặc Q x y \((1 \leq x,y \leq N)\).Q theo thứ tự.Test 1
3 3
1 2
2 3
P 1 3
Q 2 3
Q 1 3
1
2
Chúa đất vùng rừng AnLuuLand sau khi cho người anh hùng algorit chọn một vùng đất đã nhận ra sai lầm của mình khi cho phép phá rừng để làm nương rẫy, làm giảm diện tích rừng gây ảnh hưởng lớn đến biến đổi khí hậu.
Để khắc phục hậu quả, chúa đất quyết định trồng cây vào khu vực trống trước đó. Khu vực trống có thể xem là một hình chữ nhật gồm \(m\) hàng và \(n\) cột. Ban đầu trên này chưa hề có cây. Chúa trồng lên mỗi ô một cây xanh, ban đầu mỗi cây cao \(1cm\). Mỗi tuần chúa đất ra một trong hai lệnh theo thứ tự:
Sau \(k\) tuần thực hiện, chúa đất muốn biết về tình trạng độ cao của cây xanh ở các lệnh dạng \(2\) trong khu vực này. Nhiệm vụ của bạn thống kê điều đó cho chúa đất.
Test 1
4 5 5
1 1 1 4 5 1
2 1 1 3 3
1 1 1 2 2 2
2 1 2 1 2
2 1 1 4 5
18
4
48
Jian-Jia đang lên kế hoạch cho kỳ nghỉ tiếp theo tại Đài Loan. Trong kỳ nghỉ, cậu di chuyển giữa các thành phố và tham quan các điểm du lịch trong những thành phố đó.
Có \(n\) thành phố, tất cả nằm dọc theo một con đường cao tốc, được đánh số liên tiếp từ \(0\) đến \(n-1\). Với thành phố \(i\) thỏa mãn \(0<i<n-1\), hai thành phố liền kề là \(i-1\) và \(i+1\). Thành phố duy nhất liền kề với thành phố 0 là thành phố 1; thành phố duy nhất liền kề với thành phố \(n-1\) là thành phố \(n-2\).
Mỗi thành phố có một số điểm du lịch. Jian-Jia có \(d\) ngày nghỉ và muốn tham quan nhiều điểm du lịch nhất có thể. Cậu đã chọn sẵn thành phố xuất phát. Trong mỗi ngày, Jian-Jia hoặc di chuyển đến một thành phố liền kề, hoặc tham quan tất cả các điểm du lịch của thành phố đang ở, nhưng không thể làm cả hai. Jian-Jia không bao giờ tham quan các điểm du lịch trong cùng một thành phố hai lần, ngay cả khi cậu đến thành phố đó nhiều lần. Hãy giúp cậu lập kế hoạch để tham quan được nhiều điểm du lịch khác nhau nhất.
Giả sử Jian-Jia có 7 ngày nghỉ, có 5 thành phố với số điểm du lịch như bảng dưới đây, và cậu xuất phát từ thành phố 2.
Thành phố Số điểm du lịch
0 10
1 2
2 20
3 30
4 1
Ngày thứ nhất, Jian-Jia tham quan 20 điểm du lịch ở thành phố 2. Ngày thứ hai, cậu di chuyển từ thành phố 2 đến thành phố 3. Ngày thứ ba, cậu tham quan 30 điểm du lịch ở thành phố 3. Cậu dùng ba ngày tiếp theo để đi từ thành phố 3 đến thành phố 0, rồi tham quan 10 điểm du lịch ở thành phố 0 vào ngày thứ bảy.
Ngày Hoạt động
1 Tham quan các điểm du lịch ở thành phố 2
2 Di chuyển từ thành phố 2 đến thành phố 3
3 Tham quan các điểm du lịch ở thành phố 3
4 Di chuyển từ thành phố 3 đến thành phố 2
5 Di chuyển từ thành phố 2 đến thành phố 1
6 Di chuyển từ thành phố 1 đến thành phố 0
7 Tham quan các điểm du lịch ở thành phố 0
Tổng số điểm du lịch được tham quan là
Đây là số điểm du lịch lớn nhất có thể tham quan trong 7 ngày nếu xuất phát từ thành phố 2.
Hãy cài đặt hàm findMaxAttraction(n, start, d, attraction) để tính số điểm du lịch lớn nhất Jian-Jia có thể tham quan.
n: số thành phố.start: chỉ số thành phố xuất phát.d: số ngày nghỉ.attraction: mảng độ dài \(n\); attraction[i] là số điểm du lịch ở thành phố \(i\), với \(0 \le i \le n-1\).Trong tất cả các subtasks, số điểm du lịch ở mỗi thành phố là không âm và
Các ràng buộc bổ sung:
| Subtask | Điểm | Giới hạn \(n\) | Số điểm du lịch tối đa trong một thành phố | Thành phố xuất phát |
|---|---|---|---|---|
| 1 | 7 | \(2 \le n \le 20\) | \(1\,000\,000\,000\) | Không có ràng buộc bổ sung. |
| 2 | 23 | \(2 \le n \le 100\,000\) | \(100\) | Thành phố 0. |
| 3 | 17 | \(2 \le n \le 3\,000\) | \(1\,000\,000\,000\) | Không có ràng buộc bổ sung. |
| 4 | 53 | \(2 \le n \le 100\,000\) | \(1\,000\,000\,000\) | Không có ràng buộc bổ sung. |
Bạn phải nộp đúng một tệp có tên holiday.c, holiday.cpp hoặc holiday.pas, cài đặt chương trình con theo đặc tả trên và chữ ký dưới đây. Với C/C++, bạn phải nạp tệp tiêu đề holiday.h.
Lưu ý: kết quả có thể rất lớn; kiểu trả về của findMaxAttraction là số nguyên 64 bit.
C/C++:
long long int findMaxAttraction(int n, int start, int d,
int attraction[]);
Pascal:
function findMaxAttraction(n, start, d : longint;
attraction : array of longint): int64;
Trình chấm mẫu đọc dữ liệu theo định dạng:
n, start, d.attraction[0], ..., attraction[n-1].Trình chấm mẫu in giá trị trả về của findMaxAttraction.
Jian-Jia đang xây một bức tường bằng cách xếp các viên gạch cùng kích thước. Bức tường gồm \(n\) cột gạch, được đánh số từ \(0\) đến \(n-1\) từ trái sang phải. Các cột có thể cao khác nhau. Độ cao của một cột là số viên gạch trong cột đó.
Ban đầu, tất cả các cột đều không có gạch. Sau đó, Jian-Jia thực hiện \(k\) giai đoạn thêm hoặc bớt gạch. Quá trình xây dựng kết thúc khi hoàn thành cả \(k\) giai đoạn. Trong mỗi giai đoạn, Jian-Jia được cho một dãy cột liên tiếp và một độ cao \(h\), rồi thực hiện như sau:
Nhiệm vụ của bạn là xác định hình dạng cuối cùng của bức tường.
Giả sử có 10 cột gạch và 6 giai đoạn xây dựng. Mọi dãy cột trong bảng dưới đây đều bao gồm cả hai đầu mút.
Giai đoạn Kiểu Dãy cột Độ cao
0 thêm từ cột 1 đến 8 4
1 bớt từ cột 4 đến 9 1
2 bớt từ cột 3 đến 6 5
3 thêm từ cột 0 đến 5 3
4 thêm cột 2 5
5 bớt từ cột 6 đến 7 0
Do ban đầu tất cả các cột đều rỗng, sau giai đoạn 0, mỗi cột từ 1 đến 8 có 4 viên gạch; các cột 0 và 9 vẫn rỗng. Trong giai đoạn 1, gạch được bớt khỏi các cột từ 4 đến 8 cho đến khi mỗi cột còn đúng 1 viên; cột 9 vẫn rỗng. Các cột từ 0 đến 3 nằm ngoài dãy đã cho nên không đổi. Giai đoạn 2 không làm thay đổi gì vì các cột từ 3 đến 6 không có nhiều hơn 5 viên gạch. Sau giai đoạn 3, số gạch trong các cột 0, 4 và 5 tăng lên thành 3. Sau giai đoạn 4, cột 2 có 5 viên gạch. Giai đoạn 5 loại bỏ tất cả gạch ở các cột 6 và 7.
Các hình dưới đây lần lượt mô tả bức tường sau từng giai đoạn.
Sau giai đoạn 0:
Sau giai đoạn 1:
Sau giai đoạn 2 (không thay đổi):
Sau giai đoạn 3:
Sau giai đoạn 4:
Sau giai đoạn 5:
Cho mô tả của \(k\) giai đoạn, hãy tính số viên gạch trong mỗi cột sau khi hoàn thành tất cả các giai đoạn. Bạn cần cài đặt hàm buildWall(n, k, op, left, right, height, finalHeight).
n: số cột của bức tường.k: số giai đoạn.op: mảng độ dài \(k\); op[i] là kiểu của giai đoạn \(i\): 1 là thêm, 2 là bớt, với \(0 \le i \le k-1\).left, right: hai mảng độ dài \(k\); dãy cột của giai đoạn \(i\) bắt đầu tại left[i] và kết thúc tại right[i], bao gồm cả hai đầu mút, với \(0 \le i \le k-1\). Luôn có left[i] \(\le\) right[i].height: mảng độ dài \(k\); height[i] là thông số độ cao của giai đoạn \(i\), với \(0 \le i \le k-1\).finalHeight: mảng độ dài \(n\); bạn phải gán số viên gạch cuối cùng trong cột \(i\) vào finalHeight[i], với \(0 \le i \le n-1\).Trong mọi subtask, thông số độ cao ở mọi giai đoạn là số nguyên không âm không lớn hơn \(100\,000\).
| Subtask | Điểm | Giới hạn \(n\) | Giới hạn \(k\) | Điều kiện bổ sung |
|---|---|---|---|---|
| 1 | 8 | \(1 \le n \le 10\,000\) | \(1 \le k \le 5\,000\) | Không có. |
| 2 | 24 | \(1 \le n \le 100\,000\) | \(1 \le k \le 500\,000\) | Tất cả các giai đoạn thêm xuất hiện trước tất cả các giai đoạn bớt. |
| 3 | 29 | \(1 \le n \le 100\,000\) | \(1 \le k \le 500\,000\) | Không có. |
| 4 | 39 | \(1 \le n \le 2\,000\,000\) | \(1 \le k \le 500\,000\) | Không có. |
Bạn phải nộp đúng một tệp có tên wall.c, wall.cpp hoặc wall.pas, cài đặt chương trình con theo đặc tả trên và chữ ký dưới đây. Với C/C++, bạn phải nạp tệp tiêu đề wall.h.
C/C++:
void buildWall(int n, int k, int op[], int left[], int right[],
int height[], int finalHeight[]);
Pascal:
procedure buildWall(n, k : longint; op, left, right, height :
array of longint; var finalHeight : array of longint);
Trình chấm mẫu đọc dữ liệu theo định dạng:
n, k.op[i], left[i], right[i], height[i].