Форум программистов, компьютерный форум CyberForum.ru

Двоичный поиск в упорядоченном массиве - C++

Восстановить пароль Регистрация
 
alexlight91
1 / 1 / 0
Регистрация: 03.04.2014
Сообщений: 16
07.04.2014, 12:09     Двоичный поиск в упорядоченном массиве #1
Дан упорядоченный по неубыванию целочисленный массив и набор чисел ki. Требуется для каждого числа ki найти позиции первого и последнего его вхождения в массив.

Исходные данные
Вначале вводится число N от 1 до 1000000 - количество элементов в массиве. После этого на ввод поступает N целых чисел в диапазоне от 0 до 1 миллиарда в неубывающем порядке - элементы масива. Затем указывается количество запросов M (от 1 до 100000). Затем вводится M чисел ki. Все числа отделяются друг от друга пробелами и/или переводами строк.

Результат
Для каждого запроса выведите два числа - первую и последнюю позиции числа ki в массиве. Если такое число в массиве не встречается, выведите -1

Подскажите пожалуйста как это реализовать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2014, 12:09     Двоичный поиск в упорядоченном массиве
Посмотрите здесь:

Сортировка и двоичный поиск в массиве. C++
В упорядоченном по возрастанию массиве, если количество элементов равных Р большее C++
В упорядоченном по возрастанию массиве найти элементы C++
В упорядоченном по возрастанию массиве подсчитать количество элементов C++
C++ Задача с двоичным поиском в упорядоченном массиве
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
07.04.2014, 12:37     Двоичный поиск в упорядоченном массиве #2
std::equal_range
alexlight91
1 / 1 / 0
Регистрация: 03.04.2014
Сообщений: 16
08.04.2014, 13:08  [ТС]     Двоичный поиск в упорядоченном массиве #3
newbie666, мне это ничего не говорит, надо конкретные методы
newbie666
Заблокирован
08.04.2014, 21:57     Двоичный поиск в упорядоченном массиве #4
Цитата Сообщение от alexlight91 Посмотреть сообщение
мне это ничего не говорит
Это твоя головная боль, если есть чему там болеть конечно, если тебе это ни о чём не говорит.
Цитата Сообщение от alexlight91 Посмотреть сообщение
надо конкретные методы
я тебе сказал что использовать, действуй. Хотя куда там Ладно - скопирую тебе пример с хорошего сайта, как применить его себе - уж будь любезен, сам додумывай:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// lower_bound/upper_bound example
#include <iostream>     // std::cout
#include <algorithm>    // std::lower_bound, std::upper_bound, std::sort
#include <vector>       // std::vector
 
int main () {
  int myints[] = {10,20,30,30,20,10,10,20};
  std::vector<int> v(myints,myints+8);           // 10 20 30 30 20 10 10 20
 
  std::sort (v.begin(), v.end());                // 10 10 10 20 20 20 30 30
 
  std::vector<int>::iterator low,up;
  low=std::lower_bound (v.begin(), v.end(), 20); //          ^
  up= std::upper_bound (v.begin(), v.end(), 20); //                   ^
 
  std::cout << "lower_bound at position " << (low- v.begin()) << '\n';
  std::cout << "upper_bound at position " << (up - v.begin()) << '\n';
 
  return 0;
}
Output:
lower_bound at position 3
upper_bound at position 6
Yandex
Объявления
08.04.2014, 21:57     Двоичный поиск в упорядоченном массиве
Ответ Создать тему
Опции темы

Текущее время: 00:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru