8分!!求助!!

P1102 A-B 数对

@[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


|