/**
 * struct Interval {
 *	int start;
 *	int end;
 *	Interval(int s, int e) : start(start), end(e) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param Intervals Interval类vector 
     * @param newInterval Interval类 
     * @return Interval类vector
     */
    vector<Interval> insertInterval(vector<Interval>& Intervals, Interval newInterval) {
        // write code here
        vector<Interval> ans;
        if(Intervals.size()==0) {
            ans.push_back(newInterval);
            return ans;
        }
        if(Intervals.size()==1)
        {
            Interval tmp;
            tmp.start= min(Intervals[0].start,newInterval.start);
            tmp.end = max(newInterval.end,Intervals[0].end);
            ans.push_back(tmp);     
            return ans;
        }
        for(int i=0;i<Intervals.size();i++)
        {
            if(Intervals[i].end>=newInterval.start && i+1 <Intervals.size() )
            {
                if(Intervals[i+1].start<=newInterval.end )
                {
                     Interval tmp;
                    tmp.start= min(Intervals[i].start,newInterval.start);
                    while(Intervals[i].end<=newInterval.end && i+1 <Intervals.size()) i++;
                    tmp.end = max(Intervals[i].end,newInterval.end);
                    ans.push_back(tmp);                
                }
                else if(Intervals[i+1].start>newInterval.end)
                {
                     Interval tmp;
                    tmp.start= min(Intervals[i].start,newInterval.start);
                    tmp.end = newInterval.end;
                    ans.push_back(tmp);                       
                }

            }
            else ans.push_back(Intervals[i]);
        }
        return ans;
    }
};