Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void equal_range (const int *a, int n, int i) {
- if (i == -1) {
- printf("%d ", -1);
- printf("%d\n", -1);
- return;
- }
- int i0, i1, mid;
- i0 = 0;
- i1 = i;
- while (a[i0] != a[i1] && ((i1 - i0) > 1)) {
- mid = (i1 - i0) / 2 + i0;
- if (a[mid] == a[i1]) {
- i1 = mid;
- }
- else {
- i0 = mid;
- }
- }
- if (a[i0] != a[i1])
- printf("%d ",i1 + 1);
- else
- printf("%d ", i0 + 1);
- i0 = i;
- i1 = n - 1;
- while (a[i0] != a[i1] && ((i1 - i0) > 1)) {
- mid = (i1 - i0) / 2 + i0;
- if (a[mid] == a[i0]) {
- i0 = mid;
- }
- else {
- i1 = mid;
- }
- }
- if (a[i0] != a[i1] )
- printf("%d\n", i0 + 1);
- else
- printf("%d\n", i1 + 1);
- }
- int binsearch (const int *a, int start, int end, int key) {
- while (start < end) {
- int mid = (end - start) / 2 + start;
- if (a[mid] >= key) {
- end = mid;
- }
- else {
- start = mid + 1;
- }
- }
- if (a[end] == key)
- return end;
- else
- return -1;
- }
- int main () {
- freopen("binsearch.in", "r", stdin);
- freopen("binsearch.out", "w", stdout);
- int n;
- scanf("%d", &n);
- int a[n];
- for (int i = 0; i < n; ++i) {
- scanf("%d", &a[i]);
- }
- int m;
- scanf("%d", &m);
- while (m != 0) {
- int key;
- scanf("%d", &key);
- equal_range(a, n, binsearch(a, 0, n, key));
- m--;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement