Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.59 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void equal_range (const int *a, int n, int i) {
  4.     if (i == -1) {
  5.         printf("%d ", -1);
  6.         printf("%d\n", -1);
  7.         return;
  8.     }
  9.     int i0, i1, mid;
  10.     i0 = 0;
  11.     i1 = i;
  12.     while (a[i0] != a[i1] && ((i1 - i0) > 1)) {
  13.         mid = (i1 - i0) / 2 + i0;
  14.         if (a[mid] == a[i1]) {
  15.             i1 = mid;
  16.         }
  17.         else {
  18.             i0 = mid;
  19.         }
  20.     }
  21.     if (a[i0] != a[i1])
  22.         printf("%d ",i1 + 1);
  23.     else
  24.         printf("%d ", i0 + 1);
  25.    
  26.     i0 = i;
  27.     i1 = n - 1;
  28.     while (a[i0] != a[i1] && ((i1 - i0) > 1)) {
  29.         mid = (i1 - i0) / 2 + i0;
  30.         if (a[mid] == a[i0]) {
  31.             i0 = mid;
  32.         }
  33.         else {
  34.             i1 = mid;
  35.         }
  36.     }
  37.     if (a[i0] != a[i1] )
  38.         printf("%d\n", i0 + 1);
  39.     else
  40.         printf("%d\n", i1 + 1);
  41. }
  42.  
  43. int binsearch (const int *a, int start, int end, int key) {
  44.     while (start < end) {
  45.         int mid = (end - start) / 2 + start;
  46.         if (a[mid] >= key) {
  47.             end = mid;
  48.         }
  49.         else {
  50.             start = mid + 1;
  51.         }
  52.     }
  53.     if (a[end] == key)
  54.         return end;
  55.     else
  56.         return -1;
  57. }
  58.  
  59.  
  60.  
  61. int main () {
  62.     freopen("binsearch.in", "r", stdin);
  63.     freopen("binsearch.out", "w", stdout);
  64.     int n;
  65.     scanf("%d", &n);
  66.     int a[n];
  67.     for (int i = 0; i < n; ++i) {
  68.         scanf("%d", &a[i]);
  69.     }
  70.     int m;
  71.     scanf("%d", &m);
  72.     while (m != 0) {
  73.         int key;
  74.         scanf("%d", &key);
  75.         equal_range(a, n, binsearch(a, 0, n, key));
  76.         m--;
  77.     }
  78.    
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement