出题人题解 | #城市规划#

城市规划

https://ac.nowcoder.com/acm/problem/17967

原题解链接:https://ac.nowcoder.com/discuss/149980

考虑一个很显然的O(mlogm)O(m log m)的做法

首先对所有线段按照右端点排序,然后每次在右端点处切

但是mm达到了10710^7级别,所以不能通过此题

由于题目保证所有线段的值域为1n1-n,我们可以对所有左端点,直接记录出右端点最靠左的位置

同样每次切右端点,扫一遍即可

时间复杂度:O(m)O(m)

#include<cstdio>
const int MAXN = 1e6 + 10;
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
#define min(a, b) (a < b ? a : b)
char buf[(1 << 22)], *p1 = buf, *p2 = buf;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N, M;
int r[MAXN];
int main() {
	N = read(); M = read();
	for(int i = 1; i <= N; i++) r[i] = N + 1;
	for(int i = 1; i <= M; i++) {
		int x = read(), y = read();
		r[x] = min(y, r[x]);
	}
	int cur = N + 1, ans = 0;
	for(int i = 1; i <= N; i++) {
		cur = min(cur, r[i]);
		if(i == cur) cur = r[i], ans++;
	}
	printf("%d", ans);
    return 0;
}
全部评论

相关推荐

感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇&nbsp;延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗&nbsp;就业数据都在造假,真实的就业困难不去解决&nbsp;一个个真是好样的
从明天开始狠狠卷JV...:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务