Chiến trường Ô qua

Xem dạng PDF

Gửi bài giải


Điểm: 0,06 (OI)
Giới hạn thời gian: 0.38s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Lại nói về Lục Vân Tiên, sau khi vượt qua vòng loại để trở thành Tráng Sỹ, anh đã gặp được Đôrêmon và được chú mèo máy cho đi quá giang về thế kỷ 19. Trở lại quê hương sau nhiều năm xa cách, với tấm bằng Tráng Sỹ hạng ~1~ do Liên Đoàn Type Thuật cấp, anh đã được Đức Vua cử làm đại tướng thống lãnh ~3~ quân chống lại giặc Ô Qua xâm lăng. Đoàn quân của anh sẽ gồm ~N~ đại đội, đại đội ~i~ có ~A_i > 0~ người. Quân sỹ trong ~1~ đại đội sẽ đứng thành ~1~ cột từ người ~1 \rightarrow~ người ~A_i~, như vậy binh sỹ sẽ đứng thành ~N~ cột. Vì Vân Tiên quyết ~1~ trận sẽ đánh bại quân Ô Qua nên đã cử ra ~1~ quân đoàn hùng mạnh nhất. Trong sử cũ chép rằng, quân đoàn của Vân Tiên cử ra lúc đó là một nhóm các đại đội có chỉ số liên tiếp nhau (tức là đại đội ~i~, ~i + 1~, ...~j)~. Vì sử sách thì mối mọt hết cả nên chỉ biết được mỗi thế. Ngoài ra theo giang hồ đồn đại thì sức mạnh của ~1~ quân đoàn bằng số người của đại đội ít người nhất nhân với số đại đội được chọn. Nhiệm vụ của bạn là dựa trên các thông số của các nhà khảo cổ có được, hãy cho biết quân đoàn mà Vân Tiên đã chọn ra là từ đại đội nào đến đại đội nào. Chú ý nếu có nhiều phương án thì ghi ra phương án mà chỉ số của đại đội đầu tiên được chọn là nhỏ nhất.

Input

Dòng ~1~: Số ~T~ là số bộ test.

~T~ nhóm dòng tiếp theo, mỗi nhóm dòng mô tả ~1~ bộ test. Nhóm dòng thứ ~i~:

Dòng ~1~: ~N~ ~(\le 30000)~

Dòng ~2~: ~N~ số nguyên mô tả ~N~ số ~A_1~, ~A_2~, ..., ~A_N~ (các số nguyên dương ~\le 30000)~.

Output

Kết quả mỗi test ghi ra trên ~1~ dòng, gồm ~3~ số: sức mạnh quân đoàn mạnh nhất, chỉ số của đại đội đầu tiên và chỉ số của đại đội cuối cùng được chọn.

Sample Input

2
4
3 4 3 1
4
1 2 1 3

Sample Output

9 1 3
4 1 4

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    TranThienPhuc2657  đã bình luận lúc 7, Tháng 5, 2026, 0:05 sửa 5

    Comment này spoil thuật

    Nếu các bạn để ý kĩ đề thì có thể thấy bài này có thể được hiểu theo một bài toán cổ điển khác:

    Hình chữ nhật 0 1

    Giải thích:

    Dữ kiện ~\min \cdot \text{ len}~ chính bằng diện tích hình chữ nhật lớn nhất có thể tạo ra với các cái cột có độ cao ~a[i]~ của đoạn ~[l; r]~

    Cho nên là bài này có thể giải tương tự bài trên

    Ngoài ra thì mình có một cách tiếp cận khác cho bài này với một độ phức tạp thời gian kém tối ưu hơn, các bạn có thể đọc để tham khảo ý tưởng và hướng tiếp cận thôi nhé.

    Kĩ thuật sử dụng: Disjoint set union

    Hướng tiếp cận bài này của mình sẽ có tư tưởng khá là giống với bài toán cây khung nhỏ nhất

    Ý tưởng: Thêm vào các phần tử từ lớn nhất tới nhỏ nhất vào mảng để cho có thể cố định được giá trị nhỏ nhất và chỉ cần quan tâm tới cái đoạn nào có độ dài lớn nhất hiện tại, để có thể cập nhập mấy cái phần tử liên kết với nhau thì có thể sử dụng cấu trúc dữ liệu DSU.

    Chi tiết:

    • Đầu tiên mình sẽ sắp xếp mảng từ lớn tới nhỏ, đồng thời cũng lưu lại vị trí ban đầu của mỗi cái.
    • Khi bỏ phần tử vào mảng thì mình sẽ bỏ nào vào vị trí ban đầu của nó và liên kết với hai phần tử bên trái và bên phải nếu nó đã tồn tại rồi, sau đó cập nhập lại DSU của mình (độ dài đoạn = số lượng phần tử trong tập, cận trái và phải).
    • Sau mỗi lần cập nhập phần tử mới vậy thì kiểm tra xem đoạn chứa phần tử đó có tạo ra giá trị lớn nhất không thì cập nhập
    • Lưu ý: Thứ tự ~[l; r]~ của đáp án phải có thứ tự nhỏ nhất nên là cũng phải xét trường hợp giá trị bằng giá trị nhỏ nhất hiện tại để lấy thứ tự nhỏ nhất

    Độ phức tạp: ~\mathcal{O}(N \log N)~


  • -8
    NguyenTrungHaiii  đã bình luận lúc 30, Tháng 9, 2025, 3:14 sửa 2

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.