题目:EPI
typedef int TimeType;
class Interval
{
public:
TimeType left,right;
bool isleftclosed,isrightclosed;
Interval(const TimeType &a,const TimeType &b,const bool l,const bool r):left(a),right(b),isleftclosed(l),isrightclosed(r){}
bool operator<(const Interval &a)
{
if(left!=a.left)
return left<a.left;
else if(isleftclosed!=a.isleftclosed)
return isleftclosed;
else
{
if(right!=a.right)
return right<a.right;
else if(isrightclosed!=a.isrightclosed)
return isrightclosed;
else
return false;//相等的时候返回假
}
}
};
vector<Interval> union_intervals(vector<Interval> A)
{
if(A.size()<=1)
return A;
sort(A.begin(),A.end());
vector<Interval> res;
Interval cur=A[0];
for(int i=0;i<A.size();i++)
{
//两个if语句的逻辑关系要理清楚
if(A[i].left<cur.right || (A[i].left==cur.right && (A[i].isleftclosed || cur.isrightclosed)))
{
if(A[i].right>cur.right || (A[i].right==cur.right && A[i].isrightclosed))//不要忘了!
cur.right=A[i].right;
}
else
{
res.push_back(cur);
cur=A[i];
}
}
res.push_back(cur);//不要忘了!
return res;
}