Advertisement
Guest User

NRP

a guest
Dec 7th, 2016
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. int bsearch(int arr[], vector<int> &T, int l, int r, int key) {
  2. while (r - l > 1) {
  3. int m = l + (r - l)/2;
  4. if (arr[T[m]] >= key)
  5. r = m;
  6. else
  7. l = m;
  8. }
  9. return r;
  10. }
  11.  
  12. int NRP(int arr[], int n) {
  13. vector<int> tail(n, 0);
  14. vector<int> prev(n, -1);
  15.  
  16. int len = 1;
  17. for (int i = 1; i < n; i++) {
  18. if (arr[i] < arr[tail[0]]) {
  19. tail[0] = i;
  20. }
  21. else if (arr[i] > arr[tail[len-1]]) {
  22. prev[i] = tail[len-1];
  23. tail[len++] = i;
  24. }
  25. else {
  26. int pos = bsearch(arr, tail, -1, len-1, arr[i]);
  27. prev[i] = tail[pos-1];
  28. tail[pos] = i;
  29. }
  30. }
  31.  
  32. cout << "NRP u obrnutom poretku" << endl;
  33. for (int i = tail[len-1]; i >= 0; i = prev[i])
  34. cout << arr[i] << " ";
  35. cout << endl;
  36.  
  37. return len;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement