NKLUCK - Dãy số may mắn

Tags: binary-index-tree, binary-search, sortings, data-structure

Problem

https://vn.spoj.com/problems/NKLUCK

https://oj.vnoi.info/problem/NKLUCK

Hôm nay là bữa học đầu tiên của lớp đội tuyển sau khi đón chào năm mới 2014. Thầy đã cho các học sinh của mình ăn chơi một ngày. Để lấy hên đầu năm mới thầy đã ghi lên n mẫu giấy một số nguyên công việc này đã được thầy chuẩn bị trước ở nhà. Sau đó thầy úp n mẫu giấy lên bàn để không ai biết.

Mỗi người sẽ lên và chọn một đoạn con liên tiếp tùy ý. Một đoạn được gọi là may mắn nếu trung vị của nó đúng bằng X. Trung vị của một dãy số gồm m phần tử là số ở vị trí thứ (m div 2)+1 trong dãy sau khi dãy đã được sắp xếp.

Thầy giáo muốn biết xác suất để một học sinh có thể chọn được một dãy số may mắn. Vì đi chơi xuân nhiều quá nên thầy khá mệt mỏi, các bạn hãy giúp thầy giải quyết vấn đề này nhé.

Dữ liệu vào

  • Dòng đầu chứa số nguyên dương n và số nguyên X.
  • n dòng tiếp theo mỗi dòng chứa giá trị của số được ghi trên mẫu giấy thứ i.

Giới hạn

  • n <= 5\10^5.
  • giá trị tuyệt đối của các số còn lại trong dữ liệu vào <= 10^9.
  • 25% số test có n <= 100.
  • 50% số test có n <= 500.

Dữ liệu ra

  • Chứa một số duy nhất là kết quả bài toán với đọ sai lệch không quá 0.000001.

Ví dụ

Input
4 1
1
2
3
4

Output
0.1

Tutorial

Bắt chước bài KMEDIAN tìm số bộ i..j thỏa >= ki..j thỏa >= k+1 lấy hiệu hai thằng. còn xác suất thì không gian mẫu là n*(n+1)/2.


Submission

NKLUCK.cpp