diff --git a/algorithmic_toolbox/week_4/03_divide_and_conquer_starter_files_20160804/points_and_segments/points_and_segments.cpp b/algorithmic_toolbox/week_4/03_divide_and_conquer_starter_files_20160804/points_and_segments/points_and_segments.cpp index 80761a9..8b01aa9 100644 --- a/algorithmic_toolbox/week_4/03_divide_and_conquer_starter_files_20160804/points_and_segments/points_and_segments.cpp +++ b/algorithmic_toolbox/week_4/03_divide_and_conquer_starter_files_20160804/points_and_segments/points_and_segments.cpp @@ -1,38 +1,67 @@ #include #include +#include +using namespace std; +struct segment +{ + int start; + int end; +}; -using std::vector; +vector fast_count_segments(vector> &v,vector points) { + vector cnt(points.size()); + //write your code here + int n1=v.size(),n2=points.size(),i=0,j=0,k; + for(i=0;i=v[j].first && points[i]<=v[j].second) + k++; + else if(points[i] fast_count_segments(vector starts, vector ends, vector points) { - vector cnt(points.size()); - //write your code here - return cnt; + return cnt; } vector naive_count_segments(vector starts, vector ends, vector points) { - vector cnt(points.size()); - for (size_t i = 0; i < points.size(); i++) { - for (size_t j = 0; j < starts.size(); j++) { - cnt[i] += starts[j] <= points[i] && points[i] <= ends[j]; - } + vector cnt(points.size()); + for (size_t i = 0; i < points.size(); i++) { + for (size_t j = 0; j < starts.size(); j++) { + cnt[i] += starts[j] <= points[i] && points[i] <= ends[j]; } - return cnt; + } + return cnt; } int main() { - int n, m; - std::cin >> n >> m; - vector starts(n), ends(n); - for (size_t i = 0; i < starts.size(); i++) { - std::cin >> starts[i] >> ends[i]; - } - vector points(m); - for (size_t i = 0; i < points.size(); i++) { - std::cin >> points[i]; - } - //use fast_count_segments - vector cnt = naive_count_segments(starts, ends, points); - for (size_t i = 0; i < cnt.size(); i++) { - std::cout << cnt[i] << ' '; - } + int n, m,a,b; + std::cin >> n >> m; + /*vector starts(n), ends(n); + for (size_t i = 0; i < starts.size(); i++) { + std::cin >> starts[i] >> ends[i]; + }*/ + + std::vector> v; + for(auto i =0;i>a>>b; + v.push_back(make_pair(a,b)); + } + + vector points(m); + for (auto i = 0; i < points.size(); i++) { + std::cin >> points[i]; + } + sort(v.begin(),v.end()); + + //use fast_count_segments + vector cnt = fast_count_segments(v, points); + for (size_t i = 0; i < cnt.size(); i++) { + std::cout << cnt[i] << ' '; + } }