首页 > 其他分享 >【51Nod1133】不重叠的线段

【51Nod1133】不重叠的线段

时间:2022-12-26 18:32:30浏览次数:43  
标签:51Nod1133 重叠 int 线段 端点 ans include


Description

X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。
例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。

Solution

经典的序列上的区间问题。

明显的贪心

把右端点从小到大排一个序(第一关键字),左端点从小到大排一个序(第二关键字)。
然后模拟一遍就可以了。

为什么这样是对的

很明显,右端点越小越优,如果有两段区间相交,那么就选右端点更小的那一个,因为这样影响会更小。
但是为什么还有把左端点当做第二关键字呢?
比如说有两段区间[5,5],[1,5],这两段区间明显是可以一起选的,如果先选[1,5]再选[5,5]就会得到答案2。

Code

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=100007;
int i,j,k,l,t,n,m,ans,r;
struct node{
int a,b,c;
}a[maxn];
bool cmp(node x,node y){
return x.b<y.b||x.b==y.b&&x.a<y.a;
}
int main(){
scanf("%d",&n);
fo(i,1,n)scanf("%d%d",&a[i].a,&a[i].b);
sort(a+1,a+n+1,cmp);
r=a[1].b;
fo(i,2,n){
if(a[i].a>=r){
ans++;
r=a[i].b;
}
}
printf("%d\n",ans+1);
}


标签:51Nod1133,重叠,int,线段,端点,ans,include
From: https://blog.51cto.com/u_15923198/5970024

相关文章

  • 线段树的优雅写法
    可以将Tag和Info用结构体封装,重载运算符Tag+Tag(标记合并),Info+Info(信息合并),Info+=Tag(打标记),这样就可以使用更优雅的方法写线段树了。例子:P2572#include<iostr......
  • 线段树
    title:线段树tags:算法date:2022-11-1510:37:17本文章遵守知识共享协议CC-BY-NC-SA,转载时须在文章的任一位置附上原文链接和作者署名(rickyxrc)。推荐在我的个人博......
  • 浅谈线段树
    本篇将会记录我的线段树学习时长其实很早就想学了,但由于奇妙的原因咕了好久2021.1.5今天讲讲线段树概念和初始建树线段树的概念线段树是个二叉树线段树的每个区间是......
  • 线段树复习笔记——可持久化线段树(主席树)
    可持久化线段树——主席树引入(P3834【模板】可持久化线段树2-洛谷)看看题面:题目描述如题,给定\(n\)个整数构成的序列\(a\),将对于指定的闭区间\([l,r]\)查询其......
  • HDU4553 线段树维护最长连续区间
    //题意:(略了)//思路:这里很明显是要维护区间最大连续子段,按照以下优先级查找//A1.左边区间的连续子段是否满足//A2.左右两个区间中间合并起来的子段是否满足......
  • P3372 【模板】线段树 1
    P3372【模板】线段树1题目简述对于一段数列,有如下两种操作1xyk:将区间\([x,y]\)内每个数加上\(k\)。2xy:输出区间\([x,y]\)内每个数的和。思路线段树......
  • 线段树复习笔记——综合应用(吉司机线段树)
    线段树的综合应用接下来,以洛谷P6242【模板】线段树3(超级毒瘤)为例,来看一下线段树的综合应用。先来看一下此题题意,很熟悉的题面:题目描述给出一个长度为\(n\)的数列......
  • 795前缀和,线段树,树状数组
    题目描述输入一个长度为\(n\)的整数序列。接下来再输入\(m\)个询问,每个询问输入一对\(l,r\)。对于每个询问,输出原序列中从第\(l\)个数到第\(r\)个数的和。输......
  • 2022.12.20 线段树复习笔记(未完待续)
    线段树原理及存储:如图,1即为根节点,存储着[1,5]的整个区间和,‘1’为左边界,‘5’为右边界,所以此节点表示的是[1,5]这个区间。线段树的每个节点向下二分,左儿子的编号为此节......
  • I Hate It HDU - 1754 - 线段树
    很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,......