auto compare = [] (const Interval &intv1, const Interval &intv2)
                          { return intv1.end < intv2.start; };
        auto range = equal_range(intervals.begin(), intervals.end(), newInterval, compare);
        auto itr1 = range.first, itr2 = range.second;
        if (itr1 == itr2) {
            intervals.insert(itr1, newInterval);
        } else {
            itr2--;
            itr2->start = min(newInterval.start, itr1->start);
            itr2->end = max(newInterval.end, itr2->end);
            intervals.erase(itr1, itr2);
        }
        return intervals;

  这道题我本科的时候肯定做过,现如今真的变笨了

int left=0,right=intervals.size();
        for(int i=0;i<intervals.size();i++)
            if(newInterval.start>intervals[i].end)
                left=i+1;
        for(int i=intervals.size()-1;i>=0;i--)
            if(newInterval.end<intervals[i].start)
                right=i;   //the right is the one after the last one

        //if the new interval is in the head,then insert as new head
        if(right==0)
        {
            intervals.insert(intervals.begin(),newInterval);
            return intervals;
        }
        //if the new interval is in the tail,then insert as new tail 
        if(left==intervals.size())
        {
            intervals.insert(intervals.end(),newInterval);
            return intervals;
        }
        //construct the newinterval
        newInterval.start=min(newInterval.start,intervals[left].start);
        newInterval.end=max(newInterval.end,intervals[right-1].end);

        //firt erase the old intervals,then insert one new interval
        intervals.erase(intervals.begin()+left,intervals.begin()+right);
        intervals.insert(intervals.begin()+left,newInterval);

        return intervals;