线段覆盖4网址:http://codevs.cn/problem/3012/

  线段覆盖5网址:http://codevs.cn/problem/3037/

  题目大意:给出一条直线上的一坨线段,每条线段有权值,在这一坨线段中取一小坨线段,使他们的不相交并且权值和最大。

  显然,线段覆盖4和5的差别就是线段的长度,所以这两道题完全可以一起A掉。

  从线段覆盖1做到线段覆盖5,唯一没有变的思想是:按照线段的某一个端点的位置排序,再进行贪心或DP。所以,我们还是一样先按照右端点的位置从左到右排个序。然后,我们就能DP了(f[i]表示以线段i为最后选择的线段时的最大权值和,则f[i]=max(f[j])+第i条线段的权值(1<=j<i,且线段i,j不相交)。

  不过且慢,如果在决策时直接枚举在第i个点之前的所有点,这样的时间复杂度是O(n^2)。而对于n<=10^6的数据,我们需要的是一种O(n log n)的解法。我们可以发现,按照右端点排序后的两条线段i,j(设i排在j后面),如果它们不相交,需要满足i的左端点>=j的右端点。线段i的左端点在这轮决策中是确定的,而右端点已近排好了序,满足单调性,所以,我们可以通过二分来决策一下。不过要注意,因为我们还要保持已决策答案的单调性,所以我们需要的是一个类似单调栈的东西来存放f数组,在当前决策出的结果大于栈顶的结果时,才把它入栈。最后,栈顶就是答案。

var f,a,b,c,w,y:array[..]of int64;
n,i,j,t,l,r,m:longint;
ans:int64;
procedure qs(l,r:longint);
var i,j:longint;
m,t:int64;
begin
i:=l; j:=r; m:=b[(l*+r)>>];
repeat
while b[i]<m do inc(i);
while b[j]>m do dec(j);
if i<=j then begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
t:=b[i]; b[i]:=b[j]; b[j]:=t;
t:=c[i]; c[i]:=c[j]; c[j]:=t;
inc(i); dec(j);
end;
until i>j;
if l<j then qs(l,j);
if i<r then qs(i,r);
end;
begin
read(n);
for i:= to n do
read(a[i],b[i],c[i]);
qs(,n);
t:=; y[]:=b[]; w[]:=c[]; f[]:=c[];
for i:= to n do begin
l:=; r:=t+;
while l+<r do begin
m:=(l+r)>>;
if y[m]>a[i] then r:=m
else l:=m;
end;
f[i]:=w[l]+c[i];
if f[i]>w[t] then begin
inc(t); y[t]:=b[i]; w[t]:=f[i];
end;
end;
writeln(w[t]);
end.

【codevs3012+codevs3037】线段覆盖4+线段覆盖5(DP)的更多相关文章

  1. URAL-1987 Nested Segments 线段树简单区间覆盖

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1987 题意:给定n条线段,每两条线段要么满足没有公共部分,要么包含.给出m个询问,求当前 ...

  2. hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))

    http://acm.hdu.edu.cn/showproblem.php?pid=1255 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memo ...

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

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

  4. 【BZOJ-2892&1171】强袭作战&大sz的游戏 权值线段树+单调队列+标记永久化+DP

    2892: 强袭作战 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 45  Solved: 30[Submit][Status][Discuss] D ...

  5. ZJOI 2017 树状数组(线段树套线段树)

    题意 http://uoj.ac/problem/291 思路 不难发现,九条カレン醬所写的树状数组,在查询区间 \([1,r]\) 的时候,其实在查询后缀 \([r,n]\) :在查询 \([l,r ...

  6. URAL 1966 Cycling Roads 点在线段上、线段是否相交、并查集

    F - Cycling Roads     Description When Vova was in Shenzhen, he rented a bike and spent most of the ...

  7. [BZOJ 1901] Dynamic Rankings 【树状数组套线段树 || 线段树套线段树】

    题目链接:BZOJ - 1901 题目分析 树状数组套线段树或线段树套线段树都可以解决这道题. 第一层是区间,第二层是权值. 空间复杂度和时间复杂度均为 O(n log^2 n). 线段树比树状数组麻 ...

  8. DLX 舞蹈链 精确覆盖 与 重复覆盖

    精确覆盖问题:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 还有重复覆盖问题 dancing links 是 一种数据结构,用来优化搜索,不算是一种算法.(双向 ...

  9. 【xsy3423】党² 线段树+李超线段树or动态半平面交

    本来并不打算出原创题的,此题集CF542A和sk的灵感而成,算个半原创吧. 题目大意: 给定有$n$个元素的集合$P$,其中第$i$个元素中包含$L_i,R_i,V_i$三个值. 给定另一个有$n$个 ...

  10. zoj3228 Searching the String AC自动机查询目标串中模式串出现次数(分可覆盖,不可覆盖两种情况)

    /** 题目:zoj3228 Searching the String 链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=34 ...

随机推荐

  1. mvc ajax给control传值问题

    jquery中的ajax操作给后台传值 $.ajax({ type: 'POST',   url: '<%=Url.Action("test","testIndex ...

  2. Android无线测试之—UiAutomator UiDevice API介绍四

    拖拽与滑动 一.概念介绍: 1)拖拽:将组建从一个坐标移动到另一个坐标 2)移动:从一二坐标点移动到另一个坐标点 3)步长:从一点滑动到另一点使用的时间 二.拖拽与滑动的相关API: 返回值 方法名 ...

  3. Java的版本历史与特性

    一个比较流行的问题是,“Java下一个版本会有什么特性呢?” .这是否是个好问题却有待商榷.在下面的内容里,我总结了至今为止的Java主要发行版中各自引入的新特性,这样做的目的是为了突出各个新特性是在 ...

  4. NetCore

    正确理解DTO.值对象和POCO https://www.cnblogs.com/redmoon/archive/2015/04/29/4467485.html ASP.NET Core 配置系统 h ...

  5. jQuery DOM 元素方法(get)

    jQuery DOM 元素方法 1..get() 获得由选择器指定的 DOM 元素. $(selector).get(index)index 可选.规定获取哪个匹配元素(通过 index 编号). 实 ...

  6. hive表信息查询:查看表结构、表操作等

    转自网友的,主要是自己备份下 有时候不记得! 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表 1.hive模糊搜索表 show tabl ...

  7. 相似度模型 similarity model

    Lucene4.0附加了相似度模型,允许在文档中使用不同的公式.

  8. $(document).ready() $(window).load 及js的window.onload

    1.$(document).ready()  简写为$(function(){}) DOM结构绘制完成执行,而无需等到图片或其他媒体下载完毕. 2.$(window).load  在有时候确实我们有需 ...

  9. python实现复制整个目录的方法

    import shutil #复制文件 shutil.copyfile('listfile.py', 'd:/test.py') #复制目录 shutil.copytree('d:/temp', 'c ...

  10. 【转载】Java中使用Jedis操作Redis

    1 package com.test; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.Li ...