1. 程式人生 > >CodeForces 251 A.Points on Line(二分)

CodeForces 251 A.Points on Line(二分)

Description

給出數軸上n個點的座標,問有多少種方案可以從中選取三個點使得其中距離最遠點對距離不超過d

Input

第一行兩個整數n,d,之後升序的輸入n個點的座標ai(1n105,1d109,|ai|109)

Output

輸出滿足條件的方案數

Sample Input

4 3
1 2 3 4

Sample Output

1

Solution

列舉第一個點,之後二分找到距其距離不超過d的點數cnt,從中任意取兩個均可

Code

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; typedef pair<int,int>P; const int INF=0x3f3f3f3f,maxn=100001; int n,d,a[maxn]; ll C(int n) { return
(ll)n*(n-1)/2; } int main() { while(~scanf("%d%d",&n,&d)) { for(int i=0;i<n;i++)scanf("%d",&a[i]); ll ans=0; for(int i=0;i<n;i++) { int pos=upper_bound(a,a+n,a[i]+d)-a-1; ans+=C(pos-i); } printf("%I64d\n",ans); } return
0; }