1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <bits/stdc++.h> using namespace std;
int left(vector<int>& arr, int target){ int left = 0; int right = arr.size()-1; int mid; while(left<=right){ mid = left+(right-left)/2; if(arr[mid] < target) left = mid+1; else if(arr[mid] > target) right = mid-1; else{ if(left == mid || arr[mid-1] < target) return mid; else right = mid-1; } } return -1; }
int right(vector<int>& arr, int target){ int left = 0; int right = arr.size()-1; int mid; while(left<=right){ mid = left+(right-left)/2; if(arr[mid] < target) left = mid+1; else if(arr[mid] > target) right = mid-1; else{ if(right == mid || arr[mid+1] > target) return mid; else left = mid+1; } } return -1; }
int main(){ int n, m; scanf("%d %d",&n, &m); vector<int> arr; int num; for(int i=0; i<n; i++){ scanf("%d", &num); arr.push_back(num); } for(int i=0; i<m; i++){ scanf("%d", &num); int a = left(arr, num); int b = right(arr, num); if(a != -1 && b!= -1) printf("%d %d\n", a+1, b+1); else printf("%d %d\n", a, b); } return 0; }
|