首先不难想到对t排序,有f[i]=max(f[j])+v[i] tj<=ti且abs(pi-pj)/2<=ti-tj;
要想优化,肯定从优化转移入手
先去绝对值,当pi>=pj时,可得2ti-pi>=2tj-pj
当pi<pj,可得2ti+pi>=2tj+pj; 这样两个式子的两边完全只和当前状态有关系
由于上面是等价变换,所以当同时满足2ti+pi>=2tj+pj和2ti-pi>=2tj-pj可得到tj<=ti且abs(pi-pj)/2<=ti-tj;
这就变成了求一个点左下方的点(包括边界)的点权最大值
这显然可以对一个坐标排序而对另一个坐标离散化然后用树状数组维护前缀最大值

 var a,b,c,rank,d,v:array[..] of longint;
f,i,x,y,ans,n,m:longint; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; procedure sorta(l,r: longint);
var i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) shr ];
y:=b[(l+r) shr ];
repeat
while (a[i]<x) or ((a[i]=x) and (b[i]<y)) do inc(i);
while (x<a[j]) or ((a[j]=x) and (y<b[j])) do dec(j);
if not(i>j) then
begin
swap(a[i],a[j]);
swap(b[i],b[j]);
swap(v[i],v[j]);
inc(i);
j:=j-;
end;
until i>j;
if l<j then sorta(l,j);
if i<r then sorta(i,r);
end; procedure sortc(l,r: longint);
var i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=c[(l+r) div ];
repeat
while c[i]<x do inc(i);
while x<c[j] do dec(j);
if not(i>j) then
begin
swap(c[i],c[j]);
swap(d[i],d[j]);
inc(i);
j:=j-;
end;
until i>j;
if l<j then sortc(l,j);
if i<r then sortc(i,r);
end; procedure work(x,y:longint);
begin
while x<=m do
begin
c[x]:=max(c[x],y);
x:=x+lowbit(x);
end;
end; function ask(x:longint):longint;
begin
ask:=;
while x> do
begin
ask:=max(ask,c[x]);
x:=x-lowbit(x);
end;
end; begin
readln(m,n);
for i:= to n do
begin
readln(x,y,v[i]);
a[i]:=*x-y;
b[i]:=*x+y;
end;
sorta(,n);
for i:= to n do
begin
c[i]:=b[i];
d[i]:=i;
end;
sortc(,n);
m:=;
rank[d[]]:=;
for i:= to n do
begin
if c[i]<>c[i-] then inc(m);
rank[d[i]]:=m;
end;
fillchar(c,sizeof(c),);
for i:= to n do
begin
f:=ask(rank[i])+v[i];
ans:=max(ans,f);
work(rank[i],f);
end;
writeln(ans);
end.

bzoj2131的更多相关文章

  1. [bzoj2131]免费的馅饼_树状数组

    免费的馅饼 bzoj-2131 题目大意: 注释:$1\le n \le 10^5$,$1\le w \le 10^8$. 想法:首先,想到dp 状态:dp[i][j]表示i分钟在位置j的最大收益 优 ...

  2. [bzoj2131]免费的馅饼 树状数组优化dp

    2131: 免费的馅饼 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行是 ...

  3. bzoj2131 免费的馅饼——树状数组优化dp

    中文题目,问你最后能最多够得到多少价值的馅饼.因为宽度10^8且个数为10^5.所以不可以用dp[x][y]表示某时间某地点的最大权值. 假设你在x点处接到饼后想去y点接饼.那么需要满足的条件是t[y ...

  4. 【bzoj2131】免费的馅饼 dp+树状数组

    题解: 昨天好像做了个几乎一模一样的题目 按照ti排序 |p[i]-p[j]|<=2*(t[i]-t[j]) 然后去绝对值变为三维偏序 发现后两个式子可以推出ti<tj 所以就变成二维偏序 ...

  5. BZOJ2131 免费的馅饼【线段树优化DP】

    Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成,分别表示了每个馅饼落到 ...

  6. bzoj2131: 免费的馅饼(树状数组)

    Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成 ...

  7. bzoj2131: 免费的馅饼

    首先我们很容易看出是一个DP 然后容易看出是数据结构优化DP 但是这个限制条件有点鬼畜: abs(p[i]-p[j])/2<=(t[i]-t[j]) p[i]>p[j] -> t[i ...

  8. camp待补

    待修莫对 序列自动机 几何积分 沈阳 M 待删除背包  : 分组背包 K-LIS, K次二分(插到最后stop) 问题转化为LIS bzoj2131 hdu4055 最小线段覆盖环 实时路况 分治+f ...

随机推荐

  1. [网络] C# NetHelper网络通信编程类教程与源码下载

    点击下载 NetHelper.zip 主要功能如下所示 检查设置的IP地址是否正确,返回正确的IP地址 检查设置的端口号是否正确,返回正确的端口号 将字符串形式的IP地址转换成IPAddress对象 ...

  2. 《将博客搬至CSDN》的文章

    我的CSDN地址 博客园应该以后会很少来了.

  3. Windows环境下使用cygwin ndk_r9c编译x264

     一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让 ...

  4. HTML基础(1) 全局架构标签,特殊字符

    最基本的网页文件组成部分 其中 <head></head> 这个标签对中内容不会显示在网页中 <body></body> 中的内容可以显示在网页中. b ...

  5. 在CentOS6.0上安装Oracle 11gR2 (11.2.0.1)以及基本的配置(一)

    首先安装CentOS6.0   就不用说了.安装即可.唯一需要注意的就是后面Oracle 11G Installation guide中的Checking the Software Requireme ...

  6. C#输出40以内的所有奇数程序代码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  7. java经典题目练习-第八题简单实现方式...

    *[程序8]*题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.* 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制. 思考: 对于以上 ...

  8. C++学习笔记-1-自增和自减运算符

    1. post-increment and pre-increment 的区别 来源:http://www.c4learn.com/c-programming/c-increment-operator ...

  9. prime,素数的判断——c语言

    输入一个数a,求他是否是素数(用函数) 程序: #include<stdio.h> int prime(int a)-----------------------------------/ ...

  10. sass学习--什么是sass

    1.预备知识--什么是 CSS 预处理器 CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这 ...