题目描述
blablabla
样例
blablabla
C++ 代码
LL merge(vector<Segment>&q)
{
vector<Segment>w;
sort(q.begin(),q.end());
LL res=0;
for(int i=0;i<q.size();)
{
int j=i;
while(j<q.size()&&q[j].k==q[i].k) j++;
int st=-2e9,ed=st-1;
for(int k=i;k<j;k++)
{
if(q[k].l>ed)
{
res+=ed-st+1;
if(st!=-2e9) w.push_back({q[i].k,st,ed});
st=q[k].l,ed=q[k].r;
}
else ed=max(ed,q[k].r);
}
if(st!=-2e9) w.push_back({q[i].k,st,ed});
res+=ed-st+1;
i=j;
}
q=w;
return res;
}
不懂if(st!=-2e9) w.push_back({q[i].k,st,ed});
这里啥意思
if(st!=-2e9) w.push_back({q[i].k,st,ed})
if语句是对对输入为空的情况进行特判, 非空的话是把最后一段加进去
前面的for倒数第一次循环结束后更新了
st
和ed
,即为最后一段的区间左右区间,但是最后一次循环if(q[k].l>ed
不成立,自然也就没法把这段区间加入答案。所以在for结束后单独添加;