Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2017, 11:26   #1
kizhvac_kampazitr
 
Аватар для kizhvac_kampazitr
 
Регистрация: 02.04.2017
Сообщений: 4
По умолчанию upper_bound & lower_bound

Нужно написать функции upper_bound & lower_bound вручную ,чтоб не использовать готовые... Помогите плиз

У меня получилось что то типо этого ))
Где ошибка ?

Код:
int upper_bound(const std::vector<int>& v, int b)
{
	int start = 0;
	int end = v.size();
	int count = end - start + 1;
	while(count > 0)
	{
		int step = count / 2;
		if (v[step] >= b)
		{
			start = ++b;
			count -= step + 1;
		}
		else
			count = step;
	}
	return start;
}


int lower_bound(const std::vector<int>& v, int a)
{
	int start = 0;
	int end = v.size();
	int count = end - start + 1;
	while(count > 0)
	{
		int step = count / 2;
		if (v[step] < a)
		{
			start = ++a;
			count -= step + 1;
		}
		else
			count = step;
	}
	return start;
}

Последний раз редактировалось kizhvac_kampazitr; 09.04.2017 в 11:35.
kizhvac_kampazitr вне форума Ответить с цитированием
Старый 09.04.2017, 23:31   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Что они должны делать?
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 09.04.2017, 23:54   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
template<typename T>
size_t bin_search(const std::vector<T>& v, const int b)
{
	int start = 0;
	int end = v.size();
	while(start < end )
	{
	    int count = end - start + 1;
		int step = start + count / 2;
		if (v[step] > b)
		{
			start = step + 1;
		}
		else if (v[step]<b)
		{
			end = step - 1;
		}
		else{
		    return step;
		}
	}
	return start;
}

template<typename T>
size_t upper_bound(const std::vector<int>& v, const int b)
{
    int start = bin_search(v,b);
    int i = start;
    while(i<v.size() && v[i] == b)
        ++i;
    return i-1;
}

template<typename T>
size_t upper_bound(const std::vector<int>& v, const int b)
{
    int i = bin_search(v,b);
    while(i<v.size() && v[i] == b)
        ++i;
    return i-1;
}

template<typename T>
size_t lower_bound(const std::vector<int>& v, const int b)
{
    int i = bin_search(v,b);
    while(i>=0 && v[i] == b)
        --i;
    return i+1;
}
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не перегружается ostream& operator<<(ostream &, Card&) Antej Общие вопросы C/C++ 2 17.12.2012 14:02
Разница между cout/cin && printf/scanf treis1000 Общие вопросы C/C++ 7 20.03.2012 18:49
TForm & TImage & PNG & Прозрачность delphi_beginner Общие вопросы Delphi 7 19.09.2009 08:46
Просто не понимаю б чём проблема!!!!!!!(char* && index) artush1984 Общие вопросы C/C++ 12 30.05.2009 03:30