@[heyz](/user/1015977) 有没有一种可能你二分完之后find函数里的ans还是-1
by ljlbj_fengyuwuzu @ 2024-01-31 13:30:11
那也不可能8分呀?
by heyz @ 2024-01-31 13:37:18
else if 里的判断条件应该是 a[mid]>x
~~(你看我眼熟不)~~
by Jason_Ming @ 2024-01-31 13:50:53
@[heyz](/user/1015977)
by Jason_Ming @ 2024-01-31 14:07:16
的确!
666666
by heyz @ 2024-01-31 14:07:26
打错了
by heyz @ 2024-01-31 14:08:14
改过来还是8分
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,c,a[200005];
long long ans=0;
int finda(int x){
long long l=1,r=n,ans=-1;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==x){
ans=mid;
r=mid-1;
}
else if(a[mid]>x) r=mid-1;
else l=mid+1;
}
return ans;
}
int findb(int x){
long long l=1,r=n,ans=-1;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==x){
ans=mid;
l=mid+1;
}
else if(a[mid]>x) r=mid-1;
else l=mid+1;
}
return ans;
}
int main() {
cin>>n>>c;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
int findd=a[i]+c;
int x=finda(findd),y=findb(findd);
if(x==-1) continue;
ans+=y-x+1;
}
cout<<ans;
}
```
by heyz @ 2024-01-31 14:15:00
@[heyz](/user/1015977) 不好意思哈,刚才有一点没注意到:应该对输入的数据排序,因为二分必须在有序数列中使用。实在抱歉
by Jason_Ming @ 2024-01-31 14:17:16
题目没说数据保证升序给出
by Jason_Ming @ 2024-01-31 14:50:08
AC!!
谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
by heyz @ 2024-01-31 15:09:27