上海计算机学会2026年月6月赛C++丙组T4 区间的并

发布时间:2026/10/12 8:05:53
上海计算机学会2026年月6月赛C++丙组T4 区间的并 区间的并题目描述给定NNN个区间其中第iii个区间从数轴上的AiA_iAi​出发到BiB_iBi​结束请计算并输出这些区间一共覆盖了多长的数轴。输入格式第一行单个整数NNN第二行到第N1N1N1行每行两个整数表示AiA_iAi​与BiB_iBi​。输出格式单个整数表示所有区间并集的长度。数据范围对于 50% 的数据1≤n≤10001 \le n \le 10001≤n≤10000≤ai≤bi≤1040 \le a_i \le b_i \le 10^40≤ai​≤bi​≤104对于 100% 的数据1≤n≤300,0001 \le n \le 300,0001≤n≤300,0000≤ai≤bi≤1090 \le a_i \le b_i \le 10^90≤ai​≤bi​≤109样例样例1输入3 10 12 1 3 2 5输出6说明区间为 [1,5] 和 [10,12]总长度 4 2 6。样例2输入2 10 20 1 100输出99我的题解这道题要求计算多个区间并集的总长度。常规思路是先将所有区间按左端点排序然后依次合并重叠或相邻的区间实际上只要当前区间的左端点小于等于已合并区间的右端点就说明有重叠可以合并并累加不重叠部分的长度。具体来说我先把第一个区间作为当前合并区间[s, t]然后从第二个区间开始遍历如果当前区间的左端点p[i].first小于等于t说明它与当前合并区间有重叠或相邻我更新t为两者右端点的较大值继续合并否则当前合并区间结束我将它的长度t - s累加到答案中然后以当前区间作为新的合并区间。最后遍历结束后再加上最后一个合并区间的长度。时间复杂度排序 O(N log N)遍历 O(N)总 O(N log N)N 最大 300000可行。空间复杂度O(N) 存储区间。注意区间长度是右端点减左端点因为覆盖的是连续实数轴长度即差值。带注释的源代码仅增加注释未改动原逻辑#includebits/stdc.husingnamespacestd;intn;pairint,intp[300005];// 存储区间first为左端点second为右端点intans0;intmain(){cinn;// 读入所有区间for(inti1;in;i){cinp[i].firstp[i].second;}// 按左端点从小到大排序sort(p1,pn1);// 初始化当前合并区间为第一个区间intsp[1].first;inttp[1].second;// 从第二个区间开始合并for(inti2;in;i){// 如果当前区间的左端点 已合并区间的右端点说明有重叠if(p[i].firstt){// 更新右端点为较大值tmax(t,p[i].second);}else{// 否则当前合并区间结束累加其长度anst-s;// 开始新的合并区间sp[i].first;tp[i].second;}}// 加上最后一个合并区间的长度coutanst-s;return0;}

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询