Codevs_P3037 线段覆盖 5(DP+二分)
来源:互联网 发布:php cookies管理系统 编辑:程序博客网 时间:2024/06/05 11:23
时间限制: 3 s
空间限制: 256000 KB
题目等级 : 钻石 Diamond
题目描述 Description
数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~10^18,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大。
输入描述 Input Description
第一行一个整数n,表示有多少条线段。
接下来n行每行三个整数, ai bi ci,分别代表第i条线段的左端点ai,右端点bi(保证左端点<右端点)和价值ci。
输出描述 Output Description
输出能够获得的最大价值
样例输入 Sample Input
3
1 2 1
2 3 2
1 3 4
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
n <= 1000000
0<=ai,bi<=10^18
0<=ci<=10^9
数据输出建议使用long long类型(Pascal为int64或者qword类型)
膜生哥,感谢生哥二分思路@IMSbillAK
思路:二分小于线段起点的编号,但要保持不下降,这样可以直接输出f[n]即可;
#include<cstdio>#include<algorithm>#include<climits>#include<iostream>using namespace std;#define N 1000005long long f[N];int n;struct Line{ long long x,y; int v;}a[N];int comp(Line x,Line y){ return x.y<y.y;}long long in(){ long long x=0;char ch=getchar(); while(ch>'9'||ch<'0') ch=getchar(); while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x;}long long Dichotomy(int x){ int l=0,r=x-1,mid; while(l<r-1){ mid=(l+r)>>1; if(a[mid].y>a[x].x) r=mid; else l=mid; } if(a[r].y<=a[x].x) return f[r]; else return f[l];}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) a[i].x=in(),a[i].y=in(),a[i].v=in(); sort(a+1,a+n+1,comp);a[0].y=INT_MIN; for(int i=1;i<=n;i++){ f[i]=max(f[i-1],Dichotomy(i)+a[i].v); } printf("%lld",f[n]); return 0;}
1 0
- Codevs_P3037 线段覆盖 5(DP+二分)
- codevs 3037 线段覆盖5 (dp+二分+快排)
- [CodeVS3012]线段覆盖4(DP+二分)
- codevs 3012 线段覆盖4(dp+二分优化)
- codevs3037 线段覆盖5 离散化DP
- 线段覆盖 dp
- codevs3027 线段覆盖2(DP)
- 维基oi 线段覆盖 3027 序列dp
- ACM 3027 线段覆盖 2 (dp+相容)
- codevs3012 线段覆盖 4 dp好题
- Codevs 3027 线段覆盖 2 序列dp
- 线段覆盖系列(dp+贪心)
- 道路覆盖 (二分答案+状压DP)
- BSOJ 3808:穿越七色虹 二分,线段覆盖
- wikioi p3037 线段覆盖 5
- [CODEVS 3037] 线段覆盖 5
- 【Codevs 3037】线段覆盖5
- codevs 3037 线段覆盖 5,codevs 3012 线段覆盖 4,codevs 3027 线段覆盖 2
- 学习笔记之重写原型
- 冒泡排序(Bubble_Sort)
- yii2 strace 追踪正在执行的进程
- 二十三种设计模式
- 安卓Android多阶段进度条progress bar附带动画效果
- Codevs_P3037 线段覆盖 5(DP+二分)
- static
- 发现一个不错的网站,记下来http://blog.coderzh.com/
- 博客开篇
- RabbitMQ消息队列在PHP下的应用
- SQLite C++获取表信息、获取列名、获取列类型
- 逻辑思维训练500题
- 推荐一下django学习的网址!!!
- 仿微信长按选项删除该聊天和置顶该聊天ContextMenu