2 条题解
-
0
Guest
-
0
直接二分(doge)(其实是懒得处理重复的问题doge)
#include<bits/stdc++.h> #define M 200010 using namespace std; int n,c; long long ans=0; int num[M]; int main(){ scanf("%d %d",&n,&c); for(int i=0;i<n;++i) scanf("%d",&num[i]); sort(num,num+n); int mid=0; for(int i=n-1;i>=0;--i){ int l=0,r=n-1; while(l<=r){ mid=(l+r)>>1; if(num[i]-num[mid]>c)l=mid+1; else r=mid-1; } int nmid,ll=0,rr=n-1; while(ll<=rr){ nmid=ll+((rr-ll)>>1); if(num[i]-num[nmid]<c)rr=nmid-1; else ll=nmid+1; } ans+=ll-l; } printf("%lld",ans); return 0; }
信息
- ID
- 239
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 22
- 已通过
- 12
- 上传者