免费的馅饼 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. Codeforces--617B--Chocolate(规律)

     Chocolate Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit ...

  2. BZOJ 2084 二分+hash OR Manacher

    思路: 二分+哈希 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...

  3. BZOJ 2431 逆序对数列 DP

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列{ai},如果有i< j且ai> ...

  4. HTML学习(2018.1.18)

    1,         转义字符 转义字符:用于表示网页中的特殊字符 XHTML不直接输入符号,建议使用转义字符. &nbsp------空格: &copy------版权: & ...

  5. 设置浏览器让js报错

    ie-工具---internet选项--高级--“禁用脚本提示”前面那个框的勾去掉---“显示每个脚本错误的通知”给该项打勾 注意:此时是静态页面很容易提示出错误的行号,但是当js是动态页面的时候,浏 ...

  6. Centos6.6 安装Memcached

    一.环境介绍 1)Centos6.4 2) memcached-1.4.24 二.部署安装 计划具体部署步骤: 步骤1:安装 步骤2:配置 步骤3:运行 步骤4:检查 现在开始: 1)安装 $ yum ...

  7. O​r​a​c​l​e​1​1​g​自​带​的​S​Q​L​ ​d​e​v​e​l​o​p​e​r​无​法​打​开​解​决​

    在安装完Oracle Database 11g Release 2数据库,想试一下Oracle自带的SQL Developer工具,在操作系统菜单的所有程序中找到SQL Developer如下所示,并 ...

  8. sqlserver查询分析器在本地服务器查看其它SqlServer服务器内容

    exec sp_addlinkedserver 服务器自命名,'',sqloledb,要查询服务器的IP地址 exec sp_addlinkedsrvlogin 服务器自命名,false,null,账 ...

  9. 人脸Pose检测:ASM、AAM、CLM总结

    人脸的Pose检测可以使用基于位置约束的特征点的方法.人脸特征点定位的目的是在人脸检测的基础上,进一步确定脸部特征点(眼睛.眉毛.鼻子.嘴巴.脸部外轮廓)的位置.定位算法的基本思路是:人脸的纹理特征和 ...

  10. tee

    功能说明:把数据重定向到给定文件和屏幕上.   参数选项: -a  向文件追加内容,而不是覆盖.   tee命令允许标准输出同时把内容写入(覆盖)到文件中的实践.   tee命令允许标准输出同时把内容 ...