Guest User

Untitled

a guest
Oct 15th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.82 KB | None | 0 0
  1. int bs(vector<int>a, int low, int high, int key)
  2. {
  3. if (high < low)
  4. return -1;
  5. int mid = (low + high)/2;
  6. if (key == a[mid])
  7. return mid;
  8. if (key > a[mid])
  9. return bs(a, (mid + 1), high, key);
  10. return bs(a, low, (mid -1), key);
  11. }
  12.  
  13. int findp(vector<int>a ,int low, int high)
  14. {
  15. if(high==low)
  16. return high;
  17. if(high<low)
  18. return -1;
  19. int m = (low + high)/2;
  20. if (m < high && a[m] > a[m + 1])
  21. return m;
  22. if (m > low && a[m] < a[m - 1])
  23. return (m-1);
  24.  
  25. if (a[low] >= a[m])
  26. return findp(a, low, m-1);
  27.  
  28. return findp(a, m + 1, high);
  29.  
  30. }
  31.  
  32. int pbs(vector<int>a, int k)
  33. {
  34. int p = findp(a,0,a.size()-1);
  35. int n = a.size();
  36. if(p==-1)
  37. return bs(a,0,n-1,k);
  38. if(a[p]==k)
  39. return p;
  40. if(a[0]<=k)
  41. return bs(a,0,p-1,k);
  42. return bs(a,p,n-1,k);
  43. }
Add Comment
Please, Sign In to add comment