首页 > 其他分享 >区间合并

区间合并

时间:2023-03-18 15:15:38浏览次数:31  
标签:count temp int 合并 item second 区间

题目

给定 \(n\) 个区间 \([l_i,r_i]\),要求合并所有有交集的区间。

注意如果在端点处相交,也算有交集。

输出合并完成后的区间个数。

例如:\([1,3]\) 和 \([2,6]\) 可以合并为一个区间 \([1,6]\)。

输入格式

第一行包含整数 \(n\)。

接下来 \(n\) 行,每行包含两个整数 \(l\) 和 \(r\)。

输出格式

共一行,包含一个整数,表示合并区间完成后的区间个数。

数据范围

\(1≤n≤100000\),
\(−10^9≤l_i≤r_i≤10^9\)

输入样例:

5
1 2
2 4
5 6
7 8
7 9

输出样例:

3

思路

  1. 将所有区间用pair存储

  2. 之后对这个数组进行排序,确保位于前面的区间的左边界始终小于后面区间的左边界

  3. 取出数组中第一个区间进行维护,记为\(temp\)

  4. 遍历整个区间数组, 令count = 0;

  5. 当前的区间(第i个区间),\(i.first > temp.second\) 则 \(temp = i, count ++\)

    若 \(i.first <= temp.first\) $$ \(item.first <= temp.second\) 则 \(temp.second = i.second;\)

  6. 最终合并后,有 \(count + 1\) 个区间

代码

# include<iostream>
# include<algorithm>
# include<vector>

using namespace std;

const int N = 1e5 + 10;
typedef pair<int, int> PII;

vector<PII> all;


int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i ++) {
        int a, b;
        cin >> a >> b;
        all.push_back({a, b});
    }
    
    sort(all.begin(), all.end());
    
    PII temp = all.front();
   
    int count = 0;
    for(auto item : all) {
        if(temp.second < item.first) {
            temp = item;
            count ++;
            continue;
        }
    
        
        if(temp.second < item.second && item.first <= temp.second){
            temp.second = item.second;
        }
    }
    
    cout << count + 1;
    return 0;
}

标签:count,temp,int,合并,item,second,区间
From: https://www.cnblogs.com/wojiuyishui/p/17230645.html

相关文章

  • 【CSS】盒子边框 ③ ( 设置表格细线边框 | 合并相邻边框 border-collapse: collapse; )
    文章目录​​一、设置表格细线边框​​​​1、表格示例​​​​2、合并相邻边框​​​​3、完整代码示例​​一、设置表格细线边框1、表格示例给定一个HTML结构中的表格......
  • 动态开点线段数 & 线段数合并学习笔记
    动态开点线段树使用场景\(4\timesn\)开不下。值域需要平移(有负数)。什么时候开点显然,访问的节点不存在时(只会在修改递归时开点)。trick区间里面有负数时,\(mid=......
  • 基础算法模板之区间离散化与合并
    区间离散化将数量很少但数值很大的区间下标有序映射到一个集中的区间内,并可以根据原下标x迅速找到(二分)新下标vector<int>alls;//存储所有可能下标sort(alls.begin(......
  • [GIT] 如何处理GIT分支合并(GIT MERGE)
    1概述2分支合并如果你有两个分支main和dev,main存放稳定版本,dev是开发版本,一个阶段后,你需要把dev代码更新到main分支中。dev--(mergeupdatecontentto)-->main......
  • python使用WPS合并PPT文件
    直接上代码:importcomtypes.client#打开WPS应用程序app=comtypes.client.CreateObject("KWPP.Application")#打开第一个PPT文件prs1=app.Presentations.Open(os.pat......
  • 均值方差合并
    公式:参考:linkA数组包含m个元素,均值为mean1,方差为Var1,B数组包含n个元素,均值为mean2,方差为Var2\[mean=(n\cdotmean1+m\cdotmean2)/(m+n)\\var=(n\cdot......
  • js 合并单元格
    1.基于数据规则,设置好哪些是需要合并的。https://blog.csdn.net/m0_60504233/article/details/125187202?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.......
  • 多个文本文件txt合并
    第一步首先将需要合并的txt文本文档放在同一个文件夹中,倘若合并有顺序要求,请将txt文本文档进行重命名,使文档按照顺序排列。接着对文件夹进行重命名,尽量将文件名设置......
  • git 的分支合并策略
    一、Git的合并策略了解完怎么合并两个文件之后,我们来看一个使用gitmerge来做分支合并。如上图,将master分支合并到feature分支上,会新增一个commit节点来记录这......
  • 在线视频文件合并
    经常在浏览一些在线视频,是由大量分段视频组成,可以通过合并,并转换成mp4等格式。方法一:使用软件合并,如格式工厂的视频合并: 注:由于格式工厂每次添加的文件......