Trung vị

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 18 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho mảng \(a\) gồm \(n\) số nguyên dương \(a_1, a_2, ..., a_n\) và số nguyên dương \(M\). Một đoạn con liên tiếp của mảng \(a\) là một dãy gồm các phần tử liên tiếp có dạng: \(a_i, a_{i+1}, ..., a_j\) (\(1 \le i \le j \le n\)), độ dài là \(j - i + 1\).

Trung vị của một đoạn con liên tiếp \(b\) có độ dài \(k\) được định nghĩa như sau:

  1. Sắp xếp các phần tử của \(b\) theo thứ tự không giảm.
  2. Khi đó:
    • Nếu \(k\) lẻ: Trung vị là phần tử ở vị trí \((k+1)/2\).
    • Nếu \(k\) chẵn: Trung vị là phần tử ở vị trí \(k/2\).

Yêu cầu: Hãy đếm số lượng đoạn con liên tiếp của mảng \(a\) có trung vị bằng \(M\).

Dữ liệu vào

  • Dòng thứ nhất chứa hai số nguyên dương \(n, M\) (\(1 \le M < n \le 10^6\)).
  • Dòng thứ hai chứa \(n\) số nguyên dương \(a_1, a_2, ..., a_n\) (\(a_i \le 10^6\); \(1 \le i \le n\)).

Dữ liệu ra

  • Ghi ra một số nguyên duy nhất là kết quả của bài toán.

Ràng buộc

  • Có 40% số test ứng với 40% số điểm của bài thỏa mãn: \(n \le 10^2\).
  • Có 30% số test khác ứng với 30% số điểm của bài thỏa mãn: \(10^2 < n \le 5 \cdot 10^3\).
  • 30% số test còn lại ứng với 30% số điểm của bài không có ràng buộc gì thêm.

Ví dụ

Input

5 2
2 1 3 4 5

Output

3

Giải thích
Các đoạn con liên tiếp có trung vị bằng \(2\) là:

  • 2
  • 2 1 3
  • 2 1 3 4

Bình luận

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

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