P2249 【深基13.例1】查找 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1000005];
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; ++i)
cin >> a[i];
while(m--){
int key;
cin >> key;
int l = 1;
int r = n+1;
int ans = -1;
while(l<r){//左闭右开
int mid = l+(r-l)/2;
if(a[mid]==key){
r = mid;
ans = mid;
}
else if(a[mid]<key){
l = mid+1;
}
else{
r = mid;
}
}
if(a[ans]!=key)
ans = -1;
printf("%d ",ans);
}
return 0;
}
P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
int n,c;
int a[200005];
int main()
{
cin >> n >> c;
for(int i = 1; i <= n; ++i)
cin >> a[i];
sort(a+1,a+1+n);
long long ans = 0;
int r1 = 1;
int r2 = 1;
for(int l = 1; l <= n; ++l){
while(r1<=n&&a[r1]-a[l]<c)
++r1;
while(r2<=n&&a[r2]-a[l]<=c)
++r2;
if(a[r1]-a[l]==c&&a[r2-1]-a[l]==c)
ans += r2-r1;
}
cout << ans << endl;
return 0;
}