fork download
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5.  
  6. int search(vector<int>& nums, int target) {
  7. int n = nums.size();
  8. int low = 0;
  9. int high = n - 1;
  10. while (low <= high) {
  11. int mid = low + (high - low) / 2;
  12. if (nums[mid] == target) {
  13. return mid;
  14.  
  15. } else if (nums[mid] < nums[n - 1]) {
  16. if (target <= nums[n - 1]) {
  17. if (nums[mid] > target) {
  18. high = mid - 1;
  19. } else {
  20. low = mid + 1;
  21. }
  22. } else {
  23. high = mid - 1;
  24. }
  25. } else {
  26. if (target >= nums[0]) {
  27. if (nums[mid] > target) {
  28. high = mid - 1;
  29. } else {
  30. low = mid + 1;
  31. }
  32. } else {
  33. low = mid + 1;
  34. }
  35. }
  36. }
  37.  
  38. return -1;
  39. }
  40.  
  41.  
  42. int main() {
  43. // your code goes here
  44.  
  45. int n;
  46. int target;
  47. cin>>n;
  48. cin>>target;
  49.  
  50. vector<int> nums(n);
  51.  
  52.  
  53. for(int i=0;i<n;i++){
  54. cin>>nums[i];
  55.  
  56. }
  57.  
  58. cout<<search(nums,target);
  59.  
  60. return 0;
  61. }
Success #stdin #stdout 0s 5320KB
stdin
7 0 
4 5 6 7 0 1 2
stdout
4