免费的馅饼 bzoj-2131

题目大意:

注释:$1\le n \le 10^5$,$1\le w \le 10^8$。

想法:首先,想到dp

状态:dp[i][j]表示i分钟在位置j的最大收益

优化优化

状态:dp[i]表示最后收到i的最大收益。

转移:顺序枚举i:1->n即可。

然后,我们尝试优化

对于这个状态我们会发现转移的时候有一个绝对值的死东西,我们将它拆开就有:

2*t[j]+pos[j]<=2*t[i]+pos[i]且2*t[j]-pos[j]<=2*t[i]-pos[i]

然后按照减法为下标,用加法在树状数组上更新即可。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int w,n,f[100010],hash[100010],cnt,ans,s[100010];
struct pies
{
int t,p,v,w1,w2;
}a[100010];
int cmp(const pies &a,const pies &b)
{
return a.w1<b.w1;
}
int lowbit(int x){return x&(-x);}
int ask(int i)
{
int Max=0;
while (i!=0)
{
Max=max(Max,s[i]);
i-=lowbit(i);
}
return Max;
}
void add(int i,int val)
{
while (i<=cnt)
{
s[i]=max(s[i],val);
i+=lowbit(i);
}
}
int main()
{
scanf("%d%d",&w,&n);
for (int i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].t,&a[i].p,&a[i].v);
a[i].t*=2;
a[i].w1=a[i].t-a[i].p;
a[i].w2=a[i].t+a[i].p;
hash[++cnt]=a[i].w2;
}
sort(hash+1,hash+cnt+1);
cnt=unique(hash+1,hash+cnt+1)-hash-1;
for (int i=1;i<=n;i++)
{
a[i].w2=lower_bound(hash+1,hash+cnt+1,a[i].w2)-hash;
}
sort(a+1,a+n+1,cmp);
for (int i=1;i<=n;i++)
{
f[i]=ask(a[i].w2)+a[i].v;
ans=max(ans,f[i]);
add(a[i].w2,f[i]);
}
printf("%d\n",ans);
return 0;
}

小结:无。

[bzoj2131]免费的馅饼_树状数组的更多相关文章

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

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

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

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

  3. BZOJ_5055_膜法师_树状数组+离散化

    BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...

  4. BZOJ_3653_谈笑风生_树状数组

    BZOJ_3653_谈笑风生_树状数组 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ...

  5. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树

    BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

  6. BZOJ_2141_排队_树状数组+分块

    BZOJ2141_排队_树状数组+分块 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了 ...

  7. BZOJ_3132_上帝造题的七分钟_树状数组

    BZOJ_3132_上帝造题的七分钟_树状数组 Description “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b), ...

  8. See you~_树状数组

    Problem Description Now I am leaving hust acm. In the past two and half years, I learned so many kno ...

  9. nyoj116_士兵杀敌(二)_树状数组

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...

随机推荐

  1. C# WINFORM 局域网PING 工具(技术改变世界-cnblog)

    WINFORM 局域网PING 工具(技术改变世界-cnblog) 需求: 1.实时更新 日期时间 2.可以ping多个IP 地址,必须判断 IP地址的正确性,不能为广播地址 3.对ping结果的显示 ...

  2. FFMS SQL文件执行错误

    [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 b ...

  3. Error creating bean with name " "问题

    Spring MVC框架中使用@Autowired自动装配时出现 Error creating bean with name " "问题的解决方式在spring的xml配置文件be ...

  4. Python 40 数据库-约束

    约束 1.什么是约束 ? 除了数据类型以外额外添加的约束 2.为什么要使用约束 ? 为了保证数据的合法性 完整性 分类: 1.not null 非空约束,数据不能为空----------------- ...

  5. 2015 多校赛 第四场 1009 (hdu 5335)

    Problem Description In an n∗m maze, the right-bottom corner is the exit (position (n,m) is the exit) ...

  6. C - Stones on the Table

    Problem description There are n stones on the table in a row, each of them can be red, green or blue ...

  7. 初学Hibernate杂乱总结

    1.如果在"one"方中(如部门)写有Set属性,但是没有在映射文件中配置,那么,在获取指定部门下的所有员工时,不会报错,但是,Set内的元素个数为0.输出为"[]&qu ...

  8. border使用

    border属性 border-width  border-style  border-color  inherit border-style的值:none  dotted(点线)  dashed(虚 ...

  9. Android环境的搭建遇到的问题和解决方案

    安卓环境的搭建,我花了将近一天的时间,在最后终于找到了一个比较好的方案. 第一个问题是安卓的官网(http://developer.android.com)很难登录.SDK和ADT都是需要在官网上下载 ...

  10. dubbo之静态服务

    有时候希望人工管理服务提供者的上线和下线,此时需将注册中心标识为非动态管理模式 <dubbo:registry address="10.20.141.150:9090" dy ...