贪心想法题解的各位dalaodalaodalao都讲得很清楚了,在下就提供一种桶排的做法吧。

因为给出数据范围

0≤ai<bi≤10000000≤ai<bi≤10000000≤ai<bi≤1000000

可以想到使用桶排的方式优化。即从快排的O(nlogn)O(nlogn)O(nlogn)的复杂度降低到了O(n)O(n)O(n)的复杂度。

需要考虑的问题

快排是依照右端点直接排序后遍历所有线段,因此并不需要考虑右端点相同时的放置顺序(因为遍历一遍总会遇到),但桶排则需要考虑右端点相同的线段要如何放置。

显然右端点相同时,左端点更大的线段更有潜力,因此以左端点为第二关键字进行桶排即可。

#include <cstdio>
using namespace std;
struct node
{
int l, r;
} all[1000001];//保存数据的结构体数组
int s[1000001];//排序数组,保存以右端点位置为下标的线段的编号,即 s[all[i].r] = i
int n, last, ans, maxr;//last为上次选择的线段的右端点
//读入优化部分
inline char nc()
{
static char buf[1000000],*p1 = buf,*p2 = buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
void read(int &r)
{
static char c; r=0;
for(c=nc();c>'9'||c<'0';c=nc());
for(;c>='0'&&c<='9';r=(r<<1)+(r<<3)+(c^48),c=nc());
}
//
int main()
{
read(n);
for (int i = 1; i <= n; ++i)
{
read(all[i].l);
read(all[i].r);
maxr = maxr < all[i].r ? all[i].r : maxr;//更新最大右端点,即以后枚举的上界
if (!s[all[i].r] || all[s[all[i].r]].l < all[i].l)//如果桶的当前位置没有线段,直接放入就好了
s[all[i].r] = i;//否则以左端点为第二关键字进行排序,左端点大的优先级高
}
for (int i = 1; i <= maxr; ++i)//枚举桶位置,依次更新答案
if (s[i] && all[s[i]].l >= last && ++ans)
last = all[s[i]].r;
printf("%d", ans);
return 0;
}

[洛谷Luogu]P1803 线段覆盖问题的更多相关文章

  1. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  2. 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...

  3. (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)

    bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...

  4. P1654 OSU!-洛谷luogu

    传送门 题目背景 原 <产品排序> 参见P2577 题目描述 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败 ...

  5. 洛谷P3374(线段树)(询问区间和,支持单点修改)

    洛谷P3374 //询问区间和,支持单点修改 #include <cstdio> using namespace std; ; struct treetype { int l,r,sum; ...

  6. 【原创】洛谷 LUOGU P3373 【模板】线段树2

    P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第 ...

  7. 【原创】洛谷 LUOGU P3372 【模板】线段树1

    P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...

  8. 洛谷 P2764 最小路径覆盖问题【最大流+拆点+路径输出】

    题目链接:https://www.luogu.org/problemnew/show/P2764 题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V ...

  9. 洛谷P5280 [ZJOI2019]线段树

      https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不 ...

随机推荐

  1. 记录一次Nginx使用第三方模块fair导致的线上故障排错

    一.问题 今天发现有一台服务器的内存飙升,然后有预警,立即排查,发现该服务内存使用达到了 2G ,询问开发,当天是否有活动,被告知没有,登陆 Pinpoint 发现该服务是有两台机器,并且所有的访问都 ...

  2. JavaScript图形实例:正弦曲线

    正弦曲线的坐标方程为: Y=A*SIN(X)    (A为振幅) 1.正弦曲线 在弧度为0~4π的正弦曲线上取360个点,将这些点用线连接起来,可以绘制出正弦曲线.编写如下的HTML代码. <! ...

  3. Java程序挂掉的几种可能

    今天花了一整天在跟踪一个问题,每次感觉已经快找到原因的时候发现现象又变了,我觉得从中吸取的教训可以给大家分享一下. 为了重现这个现象,我写了一个简单的例子.在本例中,先初始化了一个map,然后用一个无 ...

  4. 字典NSDictionary和NSMutableDictionary的使用

    简介:字典是一种数据结构,字典里面的每一个元素,是一个key-value(键值对),key和value都是对象类型.同NSArray一样,里面的对象不用保持一致性. NSDictionary 1.字面 ...

  5. Lesson 12 banks and their customers

    Why is there no risk to the customer when a bank prints the customer's name on his cheques? When any ...

  6. Kubernetes 深入学习(一) —— 入门和集群安装部署

    一.简介 1.Kubernetes 是什么 Kubernetes 是一个全新的基于容器技术的分布式架构解决方案,是 Google 开源的一个容器集群管理系统,Kubernetes 简称 K8S. Ku ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:制作一个大按钮

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. java web开发_购物车功能实现

    java web开发_购物车功能实现 之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: ...

  9. Redis使用守护进程启动sentinel并指定其日志目录

    正常redis-server可以通过配置文件来指定守护进程启动以及指定日志路径,但sentinel就不一样了.正常启动redis的sentinel时,进程会直接在前台跑,一退出sentinel进程就关 ...

  10. Ubuntu 16.04 系统编译部署lamp服务。

    壹  下载Apache 和 PHP源码包: Apache:http://httpd.apache.org/download.cgi PHP:http://php.net/downloads.php 贰 ...