首页 > 其他分享 >2022-11-08 Acwing每日一题

2022-11-08 Acwing每日一题

时间:2022-11-08 13:24:56浏览次数:60  
标签:11 end 端点 res 08 合并 start 2022 区间

本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的。同时也希望文章能够让你有所收获,与君共勉!

昨天学习了离散化,而今天来学习一下区间和并。

区间和并

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

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

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

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

输入格式
第一行包含整数 n。

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

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

数据范围
1≤n≤100000,
−109≤li≤ri≤109
输入样例:

5
1 2
2 4
5 6
7 8
7 9

输出样例:

3

算法原理

实现区间的合并需要定义pair<int,int>segs变量来存储区间的左右端点。
第一步要对所给区间的左端点排序,这样才能根据单调性对所有区间进行有序的合并(从左到右)。
第二步是定义一个虚拟区间[start,end]
第三步就是合并区间了,遍历排序后的区间,从左至右对每一个都判断当前区间的左端点segs.first与虚拟区间[start,end]的右端点end的关系,如果右端点小于左端点,说明该区间不能合并,因此需要将当前的虚拟区间[start,end]作为新的合并过的区间存储到res(一个临时存储合并区间的pair),如果大于左端点,则说明该区间可以合并,那么就将较大值赋值给end
第四步就是将最后一个合并的区间放进res中,注意第三步的遍历时会剩下最后一个虚拟区间[start,end]没有放进,放进去的始终是上一个区间合并过的区间,同时也要考虑如果res中没有区间,我们也不需要把虚拟区间[start,end]装进去,因此需要特判最后一个区间不为虚拟区间。
第五步就是将res赋值给segs

代码实现

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;

void merge(vector<PII> &s){
	sort(s.begin(),s.end());
	vector<PII> res;
	int start = -2e9,end = -2e9;
	for(auto item : s){
		if(item.first > end){
			if(start != -2e9)	res.push_back({start,end});
			start = item.first,end = item.second;
		}
		else end =  max(end,item.second);
	}
	if(start != -2e9)	res.push_back({start,end});
	segss = res;
}

int main(){
    vector<PII> s;
    int n;
    cin >> n;
    for(int i=0; i< n ; ++i){
        int l,r;
        cin >> l >> r;
        s.push_back({l,r});
    }
    merge(s);
    cout << s.size() << endl;
    return 0;
}

标签:11,end,端点,res,08,合并,start,2022,区间
From: https://www.cnblogs.com/WangChe/p/16869341.html

相关文章

  • 界面组件Kendo UI for React R3 2022新版,让Web应用更酷炫
    KendoUI致力于新的开发,来满足不断变化的需求,通过React框架的KendoUIJavaScript封装来支持ReactJavascript框架。KendoUIforReact能够为客户提供更好的用户体验,并且......
  • 【2022-11-03】用心感受
    20:00只要有生活的愿望和本身力量的自信,那么整个一生将会是一座最美好的时钟。                            ......
  • 【2022-11-02】人品考验
    21:00当不好的事情发生时,你有三个选择。你可以让它定义你,让它摧毁你,也可以让它使你变强。                        ......
  • 2022NewStarCTF新生赛一些比较有意思的题目wp
    Misc_蚁剑流量分析Pcap的文件可以直接使用工具 编辑器打开目录,一个一个看,可以找到eval危险函数 看到n3wst4r,直接使用linux正则匹配,找出相关内容Url解码,了解一下蚁......
  • 【118】
    1684. 统计一致字符串的数目 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称......
  • .NET周报【11月第1期 2022-11-07】
    国内文章开源·安全·赋能-.NETConfChina2022https://mp.weixin.qq.com/s/_tYpfPeQgyEGsnR4vVLzHg.NETConfChina2022是面向开发人员的社区峰会,延续.NETConf2......
  • AHOI2022山河重整 题解
    首先容易得到\(O(n^2)\)的解法,容易观察得出任意时刻范围都应是\([1,\sum]\)否则直接寄了。考察\(i\)使得\([1,i]\)都能凑出但\(i+1\)不行。则有\(\sum\limits_......
  • 华大电子MCU-CIU32F011x3、CIU32F031x5电源管理
    6.中断和事件(INT/EVT)6.1.嵌套向量中断控制器•中断都可屏蔽(除了NMI)•4个可编程的优先等级•低延迟的异常和中断处理•电源管理控制•系统控制寄存器的......
  • 2022NOIPA层联测22
    A.极源流体上和下,左和右是等效的,只考虑下和右。操作顺序不影响结果,按任意顺序操作x次右,y次下后,一个黑格一定会变成一个长为x,宽为y的矩形。可以用两个队列记录位置,这样可......
  • 【2022.11.7】luffy项目前期部署(3)
    今日内容1前台全局样式和js配置#bodydiv默认样式,统一去掉#写一个,应用到项目中#后端接口的地址,统一写,以后统一改1.1global.css/*声明全局样式和项目的初......