Bài 4: Tấm gỗ (TS10 Hải Phòng thi thử - 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: 1400 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Tại một xưởng chế biến gỗ, người ta có \(N\) tấm gỗ được xếp thành một hàng theo thứ tự từ \(1\) đến \(N\). Sau khi gia công, mỗi tấm gỗ có một chiều cao xác định, không nhất thiết bằng nhau. Để đảm bảo tính thẩm mỹ, người thợ muốn giữ lại một số tấm gỗ sao cho khi nhìn từ đầu hàng đến cuối hàng, chiều cao các tấm gỗ còn lại thỏa mãn một trong hai dạng sau:

  • Tăng nghiêm ngặt: mỗi tấm đứng sau có chiều cao lớn hơn tấm đứng trước;
  • Giảm nghiêm ngặt: mỗi tấm đứng sau có chiều cao nhỏ hơn tấm đứng trước.

Người thợ được phép loại bỏ tùy ý một số tấm gỗ khỏi hàng.

Yêu cầu: Hãy xác định số lượng tấm gỗ ít nhất cần loại bỏ để dãy còn lại thỏa mãn một trong hai điều kiện trên.

Input

  • Dòng 1: chứa số nguyên dương \(N\) (\(1 \le N \le 10^5\));
  • Dòng 2: chứa \(N\) số nguyên \(a_1, a_2, \dots, a_N\) (\(1 \le a_i \le 10^9\)), trong đó \(a_i\) là chiều cao của tấm gỗ thứ \(i\).

Output

  • Ghi ra một số nguyên duy nhất là số tấm gỗ cần loại bỏ ít nhất.

Example

Test 1

Input
5
1 4 2 3 9
Output
1
Note

Giữ lại các tấm gỗ có chiều cao \(1, 2, 3, 9\) còn bỏ đi tấm có chiều cao là \(4\).

Test 2

Input
7
8 1 7 3 5 2 1
Output
2
Note

Giữ lại các tấm gỗ có chiều cao \(8, 7, 5, 2, 1\) còn bỏ đi tấm có chiều cao là \(1, 3\). Hoặc giữ lại \(8, 7, 3, 2, 1\) bỏ đi \(1, 5\).

Scoring

  • Subtask \(1\) (\(40\%\) số điểm): \(N \le 25\);
  • Subtask \(2\) (\(30\%\) số điểm): \(N \le 2000\);
  • Subtask \(3\) (\(30\%\) số điểm): \(N \le 10^5\).

Bình luận

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

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