[bzoj2131]免费的馅饼_树状数组
免费的馅饼 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]免费的馅饼_树状数组的更多相关文章
- bzoj2131: 免费的馅饼(树状数组)
Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成 ...
- 【bzoj2131】免费的馅饼 dp+树状数组
题解: 昨天好像做了个几乎一模一样的题目 按照ti排序 |p[i]-p[j]|<=2*(t[i]-t[j]) 然后去绝对值变为三维偏序 发现后两个式子可以推出ti<tj 所以就变成二维偏序 ...
- BZOJ_5055_膜法师_树状数组+离散化
BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...
- BZOJ_3653_谈笑风生_树状数组
BZOJ_3653_谈笑风生_树状数组 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ...
- BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树
BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...
- BZOJ_2141_排队_树状数组+分块
BZOJ2141_排队_树状数组+分块 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了 ...
- BZOJ_3132_上帝造题的七分钟_树状数组
BZOJ_3132_上帝造题的七分钟_树状数组 Description “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b), ...
- See you~_树状数组
Problem Description Now I am leaving hust acm. In the past two and half years, I learned so many kno ...
- nyoj116_士兵杀敌(二)_树状数组
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...
随机推荐
- python 端口扫描程序
#! /usr/bin/env python3 #-*- coding:utf-8 -*- import socket import threading OPEN_COUNT = 0 lock = t ...
- HBase里的官方Java API
见 https://hbase.apache.org/apidocs/index.html
- RabbitMQ 官方NET教程(六)【RPC】
在第二个教程中,我们学习了如何使用Work Queues在多个工作者之间分配耗时的任务. 但是如果我们需要在远程计算机上运行功能并等待结果怎么办? 那是一个不同的模式. 此模式通常称为远程过程调用或R ...
- 5.20rieds切换数据库
- Application windows are expected to have a root view controller at the end of application launch
今天把Xcode升级了,模拟器 用的12.1的系统,运行时发现项目总是崩溃,采用9.3系统的测试机发现错误日志如下: Application windows are expected to have ...
- Windows7环境下Composer 安装包的Cache目录位置
http://segmentfault.com/a/1190000000355928 https://getcomposer.org/doc/ 要说Composer的用法,以后再说,现在只记录wind ...
- 【java基础】(6)内部类
内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动) 显然, ...
- 171129-workaround on ubuntu-seting up piston for steem
setup ubuntu environment variables sudo vi /etc/environment Then set all below variables: percentCha ...
- MatLab之HDL coder
1 Workflow The workflow for applying HDL code generation to the hardware design process requires the ...
- 使用OpenCV画折线图
使用OpenCV画直方图是一件轻松的事情,画折线图就没有那么Easy了,还是使用一个库吧: GraphUtils 源代码添加入工程 原文链接:http://www.360doc.com/content ...