区间合并

摘要:
给定n个区间[li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。例如:[1,3]和[2,6]可以合并为一个区间[1,6]。接下来n行,每行包含两个整数l和r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。区间没有交集用pair来存放l与r。代码#include#include#includeusingnamespacestd;typedefpairPII;constintN=100010;intn;vectorsegs;voidmerges{vectorres;sort;intst=-2e9,ed=-2e9;for{if//没有交集{if(st!=-2e9)res.push_back;//防止出现一个集合都没有的情况st=seg.first,ed=seg.second;}elseed=max;//有交集}if(st!=-2e9)res.push_back;//把最后一个区间放进去也是防止一个区间都没有的情况segs=res;}intmain(){cin˃˃n;for{intl,r;cin˃˃l˃˃r;segs.push_back;}merges;cout˂˂segs.size();system;return0;}

给定 n 个区间 [li,ri],要求合并所有有交集的区间。

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

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

例如:[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。区间有交集

2。区间没有交集

用pair来存放l与r。

代码

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

using namespace std;

typedef pair<int, int> PII;

const int N = 100010;
int n;
vector<PII> segs; 

void merges(vector<PII> &segs)
{
    vector<PII> res;

    sort(segs.begin(), segs.end());

    int st = -2e9, ed = -2e9;
    for(auto seg : segs)
    {
        if(ed < seg.first) //没有交集
        {
            if(st != -2e9) res.push_back({st, ed});  //防止出现一个集合都没有的情况
            st = seg.first, ed = seg.second;
        }
        else ed = max(ed, seg.second);  //有交集
    }

    if(st != -2e9) res.push_back({st, ed});  //把最后一个区间放进去 也是防止一个区间都没有的情况

    segs = res;
}

int main()
{
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        int l, r;
        cin >> l >> r;
        segs.push_back({l, r});
    }

    merges(segs);

    cout << segs.size();

    system("pause");
    return 0;
}

免责声明:文章转载自《区间合并》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇hash函数查找和ASL计算线上redis慢查询排查下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅析State-Thread

State-Thread(以下简称st),是一个由C语言编写的小巧、简洁却高效的开源协程库。这个库基于单线程运作、不强制占用用户线程,给予了开发者最大程度的轻量级和较低的侵入性。本篇文章中,网易云信音视频研发大神将为大家简要分析State-Thread,欢迎大家积极留言,和我们共同讨论。 在开始这个话题之前,我们先来聊一聊协程。 什么是协程? 协程是一种程...

oracle教程:PLSQL常用方法汇总

oracle教程:PLSQL常用方法汇总 在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set nls_language='SIMPLIFIED CHINESE';主要知识点:一、有关表的操作1)建表 create table test as sel...

Mysql 批处理多条sql语句

package cn.itcast.demo; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import org.junit.Test; import cn.it...

state thread

State Thread 的官网地址:http://state-threads.sourceforge.net The State Threads Library is a small application library which provides a foundation for writing fast and highly scalable I...

JLINK、ULINK和STlink仿真器详解

JLink仿真器 德国SEGGER公司推出基于JTAG的仿真器。简单地说,是给一个JTAG协议转换盒,即一个小型USB到JTAG的转换盒,其连接到计算机用的是USB接口,而到目标板内部用的还是jtag协议。它完成了一个从软件到硬件转换的工作。 ULINK仿真器 现在普遍用到的是ULINK2,它是ARM公司最新推出的配套RealViewMDK使用的仿真器,是...

爬虫——爬虫模块的基本使用+获取post,get,ajax方式加载的网页的数据

一、爬虫如何抓取网页数据:网页三大特征:  -1. 网页都有自己唯一的URL(统一资源定位符)来进行定位  -2. 网页都使用HTML (超文本标记语言)来描述页面信息。  -3. 网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据。爬虫的设计思路:  -1. 首先确定需要爬取的网页URL地址。  -2. 通过HTTP/HTTP协议来获取...