ỐC SÊN

Một cửa hàng nọ có một thanh gỗ kích thước \(1 \times n\) dùng để nuôi ốc sên. Người ta đã dùng bút đánh dấu, chia thanh gỗ thành \(n\) ô vuông có độ dài cạnh bằng nhau; được đánh số từ \(1\) đến \(n\) từ trái sang phải. Do thanh gỗ không đều, các ô có thể có mức độ phù hợp khác nhau cho ốc sên; độ phù hợp của ô thứ \(i\)\(a_{i}\). Một số con ốc sên đã được đặt lên thanh gỗ, thoả mãn mỗi con ốc sên nằm gọn vào một ô và mỗi ô đều chứa không quá một con ốc sên.

Quyên đến cửa hàng để mua ốc sên về nuôi. Cậu dự định phương án là mua các ô từ \(L\) đến \(R\) và các con ốc sên ở trên đó. Vì Quyên muốn nuôi riêng từng con ốc nên chủ cửa hàng sẽ phải cắt phần gỗ được chọn thành một số đoạn, sao cho trên mỗi đoạn có đúng một con ốc sên. Cụ thể hơn, giả sử có \(k\) con ốc sên trên đoạn \(\lbrack L,\ R\rbrack\), chủ cửa hàng cần cắt đoạn \(\lbrack L,\ R\rbrack\) thành đúng \(k\) đoạn sao cho mỗi đoạn có đúng một con ốc sên và không có đoạn nào của \(\lbrack L,\ R\rbrack\) bị thừa ra. Để ốc phát triển tốt, một con ốc sên (trong số vừa được chọn ra) sẽ chỉ được bán nếu tổng độ phù hợp của các ô của đoạn mà nó đứng là không âm. Tức là, con ốc trên đoạn \(\lbrack u,v\rbrack\) được bán nếu \(a_{u} + a_{u + 1} + \ldots + a_{v} \geq \ 0\). Do có thể có nhiều cách cắt khác nhau, chủ cửa hàng muốn cắt sao cho bán được nhiều ốc sên nhất có thể.

Yêu cầu: Quyên đưa ra \(Q\) dự định mua, dự định thứ \(i\) được mô tả bởi hai số nguyên dương \(L_{i},\ R_{i}\). Hãy giúp chủ cửa hàng tìm cách cắt cho từng dự định, sao cho số lượng ốc sên bán được cho dự định đó là lớn nhất có thể và in ra số lượng đó. Lưu ý Quyên chỉ đưa ra các dự định và chủ cửa hàng đưa ra giải pháp chứ chưa thực sự cắt thanh gỗ ban đầu.

Dữ liệu vào:

  • Dòng đầu chứa hai số nguyên dương \(n,Q\) (\(n,\ Q \leq \ 5 \times \ 10^{5}\));

  • Dòng tiếp theo chứa một xâu nhị phân độ dài \(n\), ký tự thứ \(i\)\(0\) hoặc \(1\) tương ứng là ô thứ \(i\) không đặt hoặc có đặt một con ốc sên;

  • Dòng tiếp theo chứa \(n\) số nguyên \(a_{1},\ a_{2},\ \ldots,\ a_{n}\ (\left| a_{i} \right| \leq 10^{9})\);

  • Dòng thứ \(i\) trong số \(Q\) dòng tiếp theo chứa hai số nguyên \(L_{i},\ R_{i}(1 \leq L_{i} \leq R_{i} \leq n)\).

Dữ liệu bảo đảm có ít nhất một con ốc sên trong đoạn \(\left\lbrack L_{i},\ R_{i} \right\rbrack,\ i = 1,\ 2,\ \ldots,\ Q\).

Kết quả:

  • Ghi trên \(Q\) dòng, dòng thứ \(i\) ghi một số nguyên là số ốc sên bán được nhiều nhất với dự định thứ \(i\) của Quyên.

Ví dụ:

Input Output
8 5
01001101
1 -2 1 2 -1 2 1 -3
1 8
1 5
2 5
5 8
1 2
3
2
1
1
0

Ràng buộc:

  • \(16\%\) số test có \(a_{i} \geq 0\ \forall i = 1,2,3,\ldots,n;n \leq 8000;Q = 1\);

  • \(14\%\) số test có \(n \leq 8000;Q = 1\ \)\(a_{i} = 0\) nếu ô thứ \(i\) có ốc sên, \(a_{i} < 0\) nếu ô thứ \(i\) không có ốc sên;

  • \(16\%\) số test với \(n \leq 8000;Q = 1\);

  • \(12\%\) số test với \(n,\ Q \leq 8000\);

  • \(18\%\) số test với \(n,\ Q \leq \ 50000\);

  • \(24\%\) số test với ràng buộc gốc.

Bạn cần đăng nhập để nộp bài

hpcode.edu.vn
Code tích cực
Trong 24h
  1. trungnam (6/7)
  2. sythai (5/8)
  3. npk1605 (5/10)
Trong 7 ngày
  1. nguyenanhvu (40/63)
  2. khieuquan (35/55)
  3. ngokhang (27/55)
Trong 30 ngày
  1. quechi (85/105)
  2. dangphong3108 (79/125)
  3. kiennhientv (79/179)
Thống kê
AC/Sub: 97887/180710
Pascal: 17121
C++: 130348
Python: 33199
Lượt xem/tải tests: 38904

Lưu Hải Phong - 2020
[email protected]