Advertisement
kornelhowil

6B2018

Feb 6th, 2021
869
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.02 KB | None | 0 0
  1. /*
  2.     Złożoność obliczeniowa: O(n)
  3.     Złożoność pamięciowa: O(n)
  4. */
  5. struct wezel {
  6.     int w;
  7.     struct wezel *l;
  8.     struct wezel *r;
  9. }
  10. typedef struct wezel Twezel;
  11.  
  12. /* Zlicza ile węzłów ma drzewo */
  13. int ile(Twezel* d)
  14. {
  15.     if(d == NULL)
  16.         return 0;
  17.     else
  18.         return (ile(d->l) + ile(d->r) + 1);
  19. }
  20. /*
  21.     Przechodzi drzewo w kolejności infiksowej lewo prawo (LVR) wpisując elementy do tablicy
  22.     W wyniku dostajemy tablicę posortowanych wartości
  23. */
  24. void tablica(Twezel *d, int *i, int A[])
  25. {
  26.     if (d != NULL) {
  27.         tablica(d->l, i, A);
  28.         A[i] = d->w;
  29.         *i += 1;
  30.         tablica(d->l, i, A);
  31.     }
  32. }
  33.  
  34. int pary(Twezel *d, int k)
  35. {
  36.     int n = ile(d);
  37.     int *A = malloc(n * sizeof(int));
  38.     int *index;
  39.     *index = 0;
  40.  
  41.     tablica(d, index, A);
  42.  
  43.     /*
  44.         Dla danego i znajduje pierwsze j takie, że A[i] - A[j] < k
  45.         Wtedy liczba dobrych par z tym i to (n - j)
  46.     */
  47.     int licznik = 0;
  48.     int j = 0;
  49.     for (int i = 0; i < n; i++) {
  50.         while (j < n && (A[i] - A[j]) >= k)
  51.             i++;
  52.         licznik += (n - j);
  53.     }
  54.     return licznik;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement