靠和别人比较获得快感来学习,注定走不远,这是《稀缺》这本书中提到的观点,我们很容易被焦虑填满。
#include<iostream>
using namespace std;
const int N = 1e-6;
int arr[N];
int findFirst(int arr[], int arrlen, int check)
{
int left = 0 , right = arrlen - 1;
while(left <= right)
{
int mid = (left + right ) / 2;
if (arr[mid] >= check)
{
right = mid - 1 ; // if bigger just continue
// 如果已经找到匹配的值了,我们还是要把右指针往左靠,知道找到更小的,此时左指针就是第一次出现的位置,以下同理
}
else if (arr[mid] < check)
{
left = mid + 1; // if smaller
// will be first one equal to target
}
}
return left;
}
int findLast(int arr[], int arrlen , int check)
{
int left = 0 , right = arrlen - 1;
while(left <= right)
{
int mid = (left + right ) / 2;
if (arr[mid] <= check)
{
left = mid + 1; // if smaller
}
else if ( arr[mid] > check)
{
right = mid - 1 ; // if bigger just continue
// will be last one equal to target
}
}
return right;
}
int main()
{
int arrlen , querry;
cin >> arrlen >> querry;
for ( int i = 0 ; i < arrlen ; i ++ )
{
cin >> arr[i];
}
while(querry--)
{
int check;
cin >> check;
int first = findFirst(arr,arrlen,check);
int last = findLast(arr, arrlen,check);
if (first >= arrlen || arr[first] != check)
{
cout << "-1 -1\n";
continue;
}
cout << first << ' ' << last << '\n';
}
}