92pts, #3 TLE ;二分写的 , 代码求调

P1102 A-B 数对

求关 ```cpp #include<bits/stdc++.h> using namespace std; const int N=2*1e5; int a[N+5]; int n; int find1(int num,int id){ int left=id+1,right=n; while(left<=right){ int mid=(left+right)/2; if(a[mid]>=num){ right=mid-1; } else if(a[mid]<num){ left=mid+1; } } return a[left]==num?left:0; } int find2(int num,int id){ int left=id+1,right=n; while(left<=right){ int mid=(left+right)/2; if(a[mid]>num){ right=mid-1; } else{ left=mid+1; } } return a[right]==num?right:0; } int main(){ int C; cin>>n>>C; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); int A,B; long long sum=0; for(int i=1;i<=n-1;i++){ B=a[i]; A=B+C; int sum1=find1(A,i); int sum2=find2(A,i); if(sum1!=0&&sum2!=0) sum+=sum2-sum1+1; } cout<<sum; return 0; }
by AlexSong @ 2023-08-31 17:35:02


That makes sense. Closed. Thank you, boss
by A_chicken_boy @ 2023-09-01 10:17:48


|