双指针
rt
#include<bits/stdc++.h> using namespace std; const long long maxn=1e6+7; long long a[maxn*2]; int main() { long long n,l; cin >> n >> l; for(long long i=0;i<n;i++)cin>>a[i],a[i+n]=l+a[i]; sort(a,a+2*n); double half_c=l/2.0; long long ans=0; for(long long l=0,r=0;l<n;l++){ while(a[r]-a[l]<half_c)r++; r--; long long len=r-l; //cout<<len<<endl; ans+=(len)*(len-1)/2; } cout<<((n-1)*(n-2)*n/(2*3)-ans)<<endl; return 0; }