二分
1.三足鼎立
来源:题目来源
错误的原因:
最开始想的就是通过二分来操作算出上下界,然后计算长度,可惜lower_bound和upper_bound不是很会用,就没做出来,然后自己手写的二分的模板已经忘得差不多了
代码:
点击查看代码
#include<bits/stdc++.h>
#define INF 2e5+1
#define ll long long
using namespace std;
void solve(){int n,k;cin>>n>>k;vector<int>a(n);for(int i=0;i<n;i++)cin>>a[i];sort(a.begin(),a.end());ll ans=0;for(int i=0;i+1<n;i++){int most=a[i]+k;int least;if(a[i]>=k){least=a[i]-k;}else{least=k-a[i];}ll l=upper_bound(a.begin()+1+i,a.end(),least)-a.begin();ll r=lower_bound(a.begin()+1+i,a.end(),most)-a.begin();ans+=max(0ll,r-l);}cout<<ans;
}
int main(){int t;
// cin>>t;t=1;while(t--){solve();}
}
