牛客练习赛59 小松鼠吃松果(优化dp二维偏序)
小松鼠吃松果
非常nicenicenice的一道题
首先考虑dpdpdp
容易想到按照时间来排序
然后定义dp[i]dp[i]dp[i]为考虑前iii个果子且吃掉第iii个的最大价值
那么每次都去前面枚举一个jjj使得吃完jjj还可以来吃iii
吃完jjj还能吃iii有什么条件呢??
ti−tj>=abs(posi−posj)t_i-t_j>=abs(pos_i-pos_j)ti−tj>=abs(posi−posj)
当posi>=posj,ti−posi>=tj−posj当pos_i>=pos_j,t_i-pos_i>=t_j-pos_j当posi>=posj,ti−posi>=tj−posj
当posi<posj,ti+posi>=tj+posj当pos_i<pos_j,t_i+pos_i>=t_j+pos_j当posi<posj,ti+posi>=tj+posj
用树状数组维护即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2e5+10;
int pos[maxn],b[maxn],ls[maxn],sumn[maxn],n,m;
struct node{int t,id,val;bool operator < (const node&tmp ) const{return t==tmp.t?id<tmp.id:t<tmp.t;//优先按照x来排序 }
}a[maxn];
int lowbit(int x){ return x&(-x); }
int query(int x)
{int ans=0;for(;x;x-=lowbit(x)) ans = max( ans,sumn[x] );return ans;
}
void add(int x,int v)
{for(;x<=n;x+=lowbit(x)) sumn[x]=max(sumn[x],v);
}
signed main()
{cin >> n >> m;for(int i=1;i<=m;i++) scanf("%d",&pos[i]),ls[i]=pos[i];for(int i=1;i<=m;i++) scanf("%d",&b[i]);for(int i=1;i<=n;i++)scanf("%d%d%d",&a[i].t,&a[i].id,&a[i].val),a[i].t+=b[a[i].id]; for(int i=1;i<=n;i++){int x=a[i].t-pos[a[i].id],y=a[i].t+pos[a[i].id];a[i].t=x,a[i].id=y; ls[i]=y;}sort(ls+1,ls+1+n);sort(a+1,a+1+n);int ans=0; for(int i=1;i<=n;i++){int now=lower_bound(ls+1,ls+1+n,a[i].id)-ls;int dp=query(now)+a[i].val;ans = max( ans,dp );add( now,dp );}cout << ans;
}
牛客练习赛59 小松鼠吃松果(优化dp二维偏序)相关推荐
- 【牛客NOIP模拟】 牛牛的RPG游戏【二维偏序】【任意坐标斜率优化】【CDQ 分治】【李超线段树】
题意: n×mn\times mn×m 的网格图,每个点有两个权值 vali,j,bufi,jval_{i,j},buf_{i,j}vali,j,bufi,j,从 (1,1)(1,1)(1,1) ...
- 【牛客 - 696D】小K的雕塑(dp,鸽巢原理,01背包类问题)
题干: 链接:https://ac.nowcoder.com/acm/contest/696/D 来源:牛客网 小K有n个雕塑,每个雕塑上有一个整数 若集合T中的每一个元素在n个雕塑上都能找得到,则称 ...
- 牛客练习赛56 小魂和他的数列
小魂和他的数列 题目链接 题目大意 给出一个数列,让求长度为k的严格递增子序列有多少个 怎么做呢? 显然dp 这个是很好想的 for (int i= 1; i <= n; i ++ ){dp[i ...
- 牛客练习赛81 小Q与彼岸花 (分块+可持久化01trie)
题意: 题解:因为这个题目是弱化以后的,正常的范围是5e4 . 看了官方题解去学习了一波可持久化01trie然后回来把这个题补完. 可持久数据结构其实就是我们的数据结构的内容会不断发生变化,而我们还要 ...
- 【牛客练习赛59】A:小乔和小灰灰
比赛地址:https://ac.nowcoder.com/acm/contest/4743/A 题目描述 小乔和小灰灰是好朋友,现在如果一个字符串中同时出现子序列"XiaoQiao" ...
- 牛客练习赛77 小G的约数(整除分块)
其中 1 有 n 个,2 有 n/2 个.......可以发现 :所以只要在一定时间内解决即可,由于可以利用整除分块解决 ,所以两遍递归即可 ll go(ll n) {return n*(n+1)/2 ...
- 牛客练习赛79E小G的数学难题
https://ac.nowcoder.com/acm/contest/11169/E 挺有意思的一道题 可以考虑放缩 可以把每个aia_iai放大,若仍然满足条件,那原问题也满足条件 同理把每个b ...
- 牛客练习赛59 4743 c 装备合成
题目链接 这题是一个标准的高中线性规划题,用线性规划的方法按部就班的解,就能做出来. 设n件装备采用方案一,m建装备采用方案二. 不过! 通过观察我们可以发现 如果y远小于x的时候,能做出来的最大数量 ...
- 牛客练习赛59 C 装备合成(贪心+数学)
题目链接 思路:贪心的尽量选第一种方案,设第一种方案用了k1次,第二种方案用了k2次,那么方程就是2k1+4k2=x,3k1+k2=y,那么就有10k1=4y-x,关键这里k1不一定是整数,所以k1这 ...
最新文章
- vuejs linux windows,vue.js环境在window和linux安装
- 1.18.Table API SQL(概念、依赖图、Table程序依赖、扩展依赖)
- Sass学习之路(3)——Sass编译
- 经典的机器学习方面源代码库(非常全,数据挖掘,计算...)
- opengl绘制的点不显示是什么原因_中考后为什么不允许复读?原因主要在以下5点,你都清楚吗?...
- ApplePay支付使用
- 图像分割(二):高斯混合模型(GMM)方法
- Rust: 逆序输出str
- linux命令从哪里敲,Linux 笔记本基于“敲打”的命令
- 人工智能与安全论坛:智能与安全的融合与对抗
- 如何学习Java软件开发
- EasyUI——基本布局
- 简单易懂的现代魔法——Play Framework攻略1
- 贴片电阻各种封装规格及阻值标注方法
- 第二节课 上身肌肉锻炼
- 基于Python语言的文件与文件夹管理
- 建造者模式(Builder)---创建型
- DUL模型详解——代码+原理——Data Uncertainty Learning
- Kafka学习——基于已有zookeeper集群实现kafka的集成
- hacker入门专业术语
热门文章
- AUTOCAD2020入门学习笔记(一)
- HTML是一种标识语音,HTML实现网页端语音输入(语音识别,语义理解,olami)
- 设计实现信用卡用户定时还款功能
- Apples Prologue(吃苹果问题) C++
- linode购买服务器
- SpringBoot-Rabbit MQ-设置手动确认ACK-Channel shutdown异常
- 无线接入控制服务器(ac),无线AP控制器是什么?无线AP与无线AC的区别
- 【day08~10】Java面向对象基础认识
- App logcat日志分析
- python发送邮件 SMTP socks代理