目录
一、在排序数组中查找元素的第一个和最后一个位置

答案如下:
cpp
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int n = nums.size();
if(n == 0)
{
return {-1,-1};
}
auto it1 = lower_bound(nums.begin(),nums.end(),target);
auto it2 = upper_bound(nums.begin(),nums.end(),target);
if(it1 == nums.end() || *it1 != target)
{
return {-1,-1};
}
int left = it1 - nums.begin();
int right = it2 - nums.begin() - 1;
return {left,right};
}
};
二、牛可乐和魔法封印

答案如下:
cpp
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n;
int binary_search(int x, int y)
{
int left = 1, right = n;
while(left < right)
{
int mid = left + (right - left)/2;
if(a[mid] >= x)
{
right = mid;
}
else{
left = mid + 1;
}
}
if(a[left] < x) return 0;
int tmp = left;
left = 1; right = n;
while(left < right)
{
int mid = left + (right - left + 1)/2;
if(a[mid] > y)
{
right = mid - 1;
}
else{
left = mid;
}
}
if(a[left] > y) return 0;
return right - tmp + 1;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
}
int q; cin >> q;
while(q--)
{
int x,y; cin >> x >> y;
cout << binary_search(x,y) << endl;;
}
return 0;
}
三、A-B数对

答案如下:
cpp
#include<iostream>
#include<unordered_map>
using namespace std;
const int N = 2e5 + 10;
typedef long long LL;
unordered_map<int, int> mp;
int a[N];
int main()
{
int n,c; cin >> n >> c;
for(int i = 0; i < n; i++)
{
cin>>a[i];
mp[a[i]]++;
}
LL ret = 0;
for(int i = 0; i < n; i++)
{
ret += mp[c + a[i]];
}
cout << ret << endl;
return 0;
}
四、烦恼的高考志愿

答案如下:
cpp
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int a[N];
int m,n;
int find(int x)
{
int left = 1, right = m;
while(left < right)
{
int mid = (left + right)/2;
if(a[mid] >= x)
{
right = mid;
}
else{
left = mid + 1;
}
}
return left;
}
int main()
{
cin >> m >> n;
for(int i = 1; i <= m; ++i)
{
cin >> a[i];
}
sort(a+1,a+1+m);
a[0] = -1e8;
LL ret = 0;
for(int i = 1; i <= n; ++i)
{
int b; cin >> b;
int pos = find(b);
ret += min(abs(a[pos] - b), abs(a[pos-1] - b));
}
cout << ret << endl;
return 0;
}