Bài A: LAB (OLP 30/4 - Khối 10 - 2026)

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1600 (p) Thời gian: 1.0s Bộ nhớ: 1G Input: LAB.inp Output: LAB.out

Cho một dãy mô tả nhiệt độ của các ngày gồm các số nguyên từ \(1\) đến \(N\), mỗi số xuất hiện đúng một lần. Ở mỗi bước, tìm ngày có nhiệt độ cao nhất và thấp nhất trong dãy, sau đó tách dữ liệu của các ngày nằm trong đoạn giữa hai ngày này (kể cả 2 ngày đó) thành một nhóm. Dữ liệu của các ngày còn lại được nối thành dãy mới (giữ nguyên thứ tự). Lặp lại quy trình trên dãy mới cho đến khi dãy rỗng và đếm số nhóm đã tách được.

Input

  • Dòng đầu tiên gồm một số nguyên dương \(N\) (\(1 \le N \le 2 \cdot 10^5\)).
  • Dòng tiếp theo gồm \(N\) số nguyên dương \(A_1, A_2, \dots, A_N\) (\(1 \le A_i \le N\)).

Output

  • Ghi ra một số nguyên duy nhất là số nhóm tách được.

Scoring

  • Subtask \(1\) (\(2.0\) điểm): \(N \le 2000\).
  • Subtask \(2\) (\(2.5\) điểm): Sau mỗi thao tác tách nhóm, ngày đầu tiên trong dãy mới luôn là ngày có nhiệt độ thấp nhất.
  • Subtask \(3\) (\(2.5\) điểm): Không có ràng buộc nào thêm.

Example

Test 1

Input
6
3 5 1 4 6 2
Output
3
Note
  • Trong thao tác tách nhóm đầu tiên, ngày có nhiệt độ cao nhất là ngày thứ 5 (giá trị \(6\)), thấp nhất là ngày thứ 3 (giá trị \(1\)). Tách được nhóm [1, 4, 6] và dãy còn lại là [3, 5, 2].
  • Trong thao tác tiếp theo, tách được nhóm [5, 2] và dãy còn lại là [3].
  • Trong thao tác cuối cùng, tách được nhóm [3] và dãy còn lại là dãy rỗng.
  • Tổng cộng tách được \(3\) nhóm.

Test 2

Input
7
1 6 2 7 3 4 5
Output
2
Note
  • Thao tác đầu tiên, tách được nhóm [1, 6, 2, 7]. Dãy còn lại là [3, 4, 5].
  • Thao tác thứ hai, tách được nhóm [3, 4, 5]. Dãy còn lại là dãy rỗng.
  • Tổng cộng tách được \(2\) nhóm.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.