Ближайший слева отрезок, совместимый с jым

Рейтинг: 1Ответов: 1Опубликовано: 14.02.2015

Сортирую отрезки по концам:

struct arr {
    double begin, end, weight;
};

bool operator< (arr first, arr second) {
    return first.end < second.end;
}

sort(vec.begin(), vec.end());

Затем для каждого отрезка нахожу, ближайший слева от него, совместимый с ним.

long int binsearch (vector<arr> & vec, double key, long int left, long int right) {
        if (left == right)
            return left;
        long int mid = left + (right - left) / 2;
        if (vec[mid].end > key)
            return binsearch(vec, key, left, mid);
        else
            return binsearch(vec, key, mid+1, right);
}
    p[0]=0;
    for (int i = 1; i != n; ++i) {
        p[i] = binsearch(vec, vec[i].begin, 0, i);
        //cout << p[i] << endl;
    }

Не могу понять в чем ошибка.

Ответы

▲ 1

Мне кажется, у Вас проблема с равными ключами.

Ну, напишите:

 if (left >= right)
   return MIN(left, right);

тогда-то уж точно завершиться.