Advertisement
kornelhowil

2A2015

Feb 7th, 2021
854
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.86 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. /*
  4.     Złożoność obliczeniowa: O(logn)
  5.     Złożoność pamięciowa: O(1)
  6. */
  7. /*
  8.     Generalnie korzystamy z tego, że mediana na pewno nie będzie w pierwszym n/2, ani w ostatnim n/2
  9.     No i potem robimi binsearch wykreślając odpowiednią stronę, w której na pewno nie ma mediany
  10.     (Coś analogicznego do mediany sumy)
  11. */
  12. int MedianaRoznicy(int b[], int a[], int n) {
  13.     int m = (n / 2);
  14.     int beg = m, end = 3 * m;
  15.     while(beg < end) {
  16.         int poz_a = (beg + end) / 2;
  17.         printf("poz_a = %d\n", poz_a);
  18.         int poz_b = poz_a - m;
  19.         if(b[poz_b] <= a[poz_a])
  20.             beg = poz_a + 1;
  21.         else
  22.             end = poz_a;
  23.     }
  24.     return a[beg];
  25. }
  26.  
  27. int main()
  28. {
  29.     int n; scanf("%d", &n);
  30.     int b[n], a[2*n + 1];
  31.     for(int i = 0; i < n; i++)
  32.         scanf("%d", &b[i]);
  33.     for(int i = 0; i < 2*n + 1; i++)
  34.         scanf("%d", &a[i]);
  35.     printf("%d\n", MedianaRoznicy(b, a, n));   
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement