51 NOD 1428 活动安排问题(树状数组+离散化)
来源:互联网 发布:手机系统更换软件 编辑:程序博客网 时间:2024/05/16 01:48
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428
1428 活动安排问题
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
收藏
关注
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
第一行一个正整数n (n <= 10000)代表活动的个数。第二行到第(n + 1)行包含n个开始时间和结束时间。开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
31 23 42 9
Output示例
2
解析:由于数据比较大,10^9,咱可以先离散化下,最多10000*2个数,给他们排下序,标下号1~n,然后就是树状数组求区间重复个数了,如果[l,r],那么l位置+1,r+1位置-1就好了。
代码:
#include<bits/stdc++.h>using namespace std;int s[100009], e[100009], d[200009];int dp[200009], len;void add(int k, int v){ while(k <= len+10) { dp[k] += v; k += k&(-k); }}int sum(int k){ int ans = 0; while(k) { ans += dp[k]; k -= k&(-k); } return ans;}int main(){ int n; scanf("%d", &n); memset(dp, 0, sizeof(dp)); len = 0; for(int i = 1; i <= n; i++) { scanf("%d%d", &s[i], &e[i]); d[len++] = s[i]; d[len++] = e[i]; } sort(d, d+len); len = unique(d, d+len) - d; for(int i = 1; i <= n; i++) { s[i] = lower_bound(d, d+len, s[i]) - d; e[i] = lower_bound(d, d+len, e[i]) - d; add(s[i]+1, 1); add(e[i]+1, -1); } int ans = 0; for(int i = 1; i <= len+1; i++) ans = max(ans, sum(i)); printf("%d\n", ans); return 0;}
阅读全文
0 0
- 51 NOD 1428 活动安排问题(树状数组+离散化)
- 51nod 1428 活动安排问题
- 51NOD 1428 活动安排问题
- 51nod---1428 活动安排问题
- 51nod 1428 活动安排问题
- 51nod-1428 活动安排问题
- 51Nod 1428 活动安排问题
- 51nod 1428 活动安排问题
- 51nod 1428 活动安排问题
- 51nod 1428 活动安排问题
- 51nod 1428 活动安排问题
- 51Nod 1428 活动安排问题 (贪心
- 51nod 1428 活动安排问题
- 51nod 1428 活动安排问题
- 51nod 1428 活动安排问题(贪心)
- [51nod-1428]活动安排问题 题解
- 51Nod-1428-活动安排问题
- 51nod 1428 活动安排问题 贪心
- 6个月移民加拿大,您干不干?
- Go 1.9 新特性 Type Alias 详解
- 存储innode的理解【转】
- mysq中的各类查询语句
- 当我跑步时,我在想什么
- 51 NOD 1428 活动安排问题(树状数组+离散化)
- ionic2开发(一)NavController模块的生命周期事件
- 二叉树先序遍历
- 齿科预约服务-项目总结
- pd.ols(y=port, x=factors).beta
- 【jsp+servlet】JSP中的page、request、session、application四大作用域
- 19.软件生命周期(2)
- JVM内存管理的机制
- 转发与重定向的区别