Появляется ошибка: Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x7ffeef3fffe8) в строке if(time[i].second <= time[i+mid].first)
и solve(i2, half, time);
Эта функция основана на концепции двоичного поиска. Я пытался передать по ссылке, но это ничего не делает. Я не думаю, что моя рекурсивная функция приводит к ошибке «переполнение стека». В чем проблема?
#include<bits/stdc++.h>
int solve(int i, int mid, vector<pair<int,int> > &time){
if(time[i].second <= time[i+mid].first){
if(time[i+mid-1].first >= time[i].second){
int i2 = mid;
int half = mid / 2;
solve(i2, half, time);
}
else{return i + mid;}
}
else{
int half = mid/2;
int i2 = i;
solve(i2, half, time);
}
return i+mid;
}
По сути, если я мой вектор состоит из этих пар: (1 3) (3 5) (2 4) (4 6) (5 7) Сначала ... мой вектор будет отсортирован на основе на концевых элементах переключаются вокруг (3, 5) и (2, 4); Затем, начиная с (1, 3), он попытается найти первый элемент с x в (x, y), который будет ближайшим к y в (1, 3) или 3, и вернет свою позицию, аналогично функции lower_bound.
Вот как я инициализирую свой вектор:
//This is inside my int main() function
vector<pair<int,int> > time;
//I read n through cin before
while(n--){
int s, e;
cin >> s >> e;
time.push_back(make_pair(s,e));
}
//sort based on end element(cmp function) already initalized
sort(time.begin(), time.end(), cmp);
for(int i = 0; i<time.size(); ++i){
int mid = int((time.size()-i-1)/2);
total += solve(i, mid, time);
}