传送门

3012 线段覆盖 4

 时间限制: 1 s
 空间限制: 64000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从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<=1000000

0<=ci<=1000000

数据输出建议使用long long类型(Pascal为int64或者qword类型)

【题目大意】

求两两不覆盖线段价值和最大。

【思路】序列dp+二分优化+前缀和优化

本题n的范围较大,n^2肯定T,考虑优化。

/*原本code

for(int i=1;i<=n;i++)
for(int j=0;j<i;j++)
if(s[j].y<=s[i].x)
f[i]=max(f[i],f[j]+s[i].v)*/

第一层循环肯定不能去。怎样去第二层呢。

第二层的作用是找到右端点小于等于当前线段左端点线段。这个可以用二分查找,因为我们线段

的右端点已经按照升序排列,所以对于线段i我们只需要二分出(第0条线段,第i-1条线段)这个范围内第一个小于等于

s[i].y的线段的序号k即可。那么f[1--k]都可以被选作地推出f[i],但是我们要选最大的那个,所以我们需要对f数组来一个最大值前缀和优化。

【code】

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct E
{
long long x,y,v;
}s[];
long long mx[],f[],ans;
bool cmp(E a,E b)
{
return a.y<b.y;
}
int n;
long long erf(int l,int r,int x)
{
while(l<=r)
{
long long mid=l+(r-l)/;
if(s[mid].y>x)r=mid-;
else l=mid+;
}
return r;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%lld%lld%lld",&s[i].x,&s[i].y,&s[i].v);
sort(s+,s+n+,cmp);
for(int i=;i<=n;i++)
{
f[i]=max(mx[erf(,i-,s[i].x)]+s[i].v,f[i]);
ans=max(ans,f[i]);
mx[i]=max(f[i],mx[i-]);
}
printf("%lld\n",ans);
return ;
}

codevs 3012 线段覆盖4的更多相关文章

  1. Codevs 3012 线段覆盖 4

    3012 线段覆盖 4 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 黄金 Gold 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~100 ...

  2. codevs 3012 线段覆盖 4 & 3037 线段覆盖 5

    3037 线段覆盖 5  时间限制: 3 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 数轴上有n条线段,线段的两端都 ...

  3. codevs 1214 线段覆盖

    1214 线段覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段 ...

  4. codevs 1214 线段覆盖/1643 线段覆盖 3

    1214 线段覆盖/1214 线段覆盖  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 给定x轴上的N(0< ...

  5. codevs 1643 线段覆盖 3

    1643 线段覆盖 3  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 在一个数轴上有n条线段,现要选取其中 ...

  6. CODEVS 3027 线段覆盖2

    首先,先看题.....(虽然比较简单 3027 线段覆盖 2    时间限制: 1 s  空间限制: 128000 KB 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐 ...

  7. codevs 3027线段覆盖2

    传送门 3027 线段覆盖 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标, ...

  8. codevs 1214线段覆盖

    1214 线段覆盖  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 给定x轴上的N(0<N<100)条线段,每 ...

  9. codevs——T1214 线段覆盖

    http://codevs.cn/problem/1214/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descr ...

随机推荐

  1. C#开发ActiveX控件,.NET开发OCX控件案例 【转】

    http://xiaochen.2003.4.blog.163.com/blog/static/480409672012530227678/ 讲下什么是ActiveX控件,到底有什么作用?在网页中又如 ...

  2. Windows 无法卸载IE9怎么办

    1 如下图所示,使用自带的卸载工具无法卸载IE9 运行命令提示符,粘贴下面的命令 FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Window ...

  3. 非常不错的ajax原理总结

    在工作中用了Ajax N多次了,也看过一些相关方面的书籍,也算是认识了它,但是一直没有认真总结和整理过相关的东东,失败!近有闲情,将之总结如下:[名称]Ajax是Asynchronous JavaSc ...

  4. hdu 4432 数学杂题

    http://acm.hdu.edu.cn/showproblem.php?pid=4432 6分钟写的代码,一上午去调试,, 哎,一则题目没看懂就去写了,二则,哎,,恶心了.在坚持几天然后ACM退役 ...

  5. iOS学习笔记12-网络(一)NSURLConnection

    一.网络请求 在网络开发中.须要了解一些经常使用的请求方法: GET请求:get是获取数据的意思,数据以明文在URL中传递,受限于URL长度,所以数据传输量比較小. POST请求:post是向serv ...

  6. Sencha Touch 之初接触

    1.Sencha Touch开发与普通web开发有什么区别? Sencha Touch(为方便起见,本文后面一律简写为ST)页面的开发跟普通html页面相比,总体来说没有本质上的区别,只是引入了对ht ...

  7. Web框架Django(一)

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  8. Qt5的插件机制(6)--开发Qt插件时几个重要的宏

    怎样开发Qt插件,能够在Qt Assistant 中搜索"Qt Plugins"或"How to Create Qt Plugins",看看那篇manual中的 ...

  9. [转]eclipse查看某个java类属于哪个jar包

    原文地址:https://blog.csdn.net/csdnliuxin123524/article/details/73572836 在eclipse界面直接按ctrl+shift+t,弹出以下界 ...

  10. idea安装plugin

    ---恢复内容开始--- ---恢复内容结束---