小松鼠吃松果

非常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二维偏序)相关推荐

  1. 【牛客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) ...

  2. 【牛客 - 696D】小K的雕塑(dp,鸽巢原理,01背包类问题)

    题干: 链接:https://ac.nowcoder.com/acm/contest/696/D 来源:牛客网 小K有n个雕塑,每个雕塑上有一个整数 若集合T中的每一个元素在n个雕塑上都能找得到,则称 ...

  3. 牛客练习赛56 小魂和他的数列

    小魂和他的数列 题目链接 题目大意 给出一个数列,让求长度为k的严格递增子序列有多少个 怎么做呢? 显然dp 这个是很好想的 for (int i= 1; i <= n; i ++ ){dp[i ...

  4. 牛客练习赛81 小Q与彼岸花 (分块+可持久化01trie)

    题意: 题解:因为这个题目是弱化以后的,正常的范围是5e4 . 看了官方题解去学习了一波可持久化01trie然后回来把这个题补完. 可持久数据结构其实就是我们的数据结构的内容会不断发生变化,而我们还要 ...

  5. 【牛客练习赛59】A:小乔和小灰灰

    比赛地址:https://ac.nowcoder.com/acm/contest/4743/A 题目描述 小乔和小灰灰是好朋友,现在如果一个字符串中同时出现子序列"XiaoQiao" ...

  6. 牛客练习赛77 小G的约数(整除分块)

    其中 1 有 n 个,2 有 n/2 个.......可以发现 :所以只要在一定时间内解决即可,由于可以利用整除分块解决 ,所以两遍递归即可 ll go(ll n) {return n*(n+1)/2 ...

  7. 牛客练习赛79E小G的数学难题

    https://ac.nowcoder.com/acm/contest/11169/E 挺有意思的一道题 可以考虑放缩 可以把每个aia_iai​放大,若仍然满足条件,那原问题也满足条件 同理把每个b ...

  8. 牛客练习赛59 4743 c 装备合成

    题目链接 这题是一个标准的高中线性规划题,用线性规划的方法按部就班的解,就能做出来. 设n件装备采用方案一,m建装备采用方案二. 不过! 通过观察我们可以发现 如果y远小于x的时候,能做出来的最大数量 ...

  9. 牛客练习赛59 C 装备合成(贪心+数学)

    题目链接 思路:贪心的尽量选第一种方案,设第一种方案用了k1次,第二种方案用了k2次,那么方程就是2k1+4k2=x,3k1+k2=y,那么就有10k1=4y-x,关键这里k1不一定是整数,所以k1这 ...

最新文章

  1. vuejs linux windows,vue.js环境在window和linux安装
  2. 1.18.Table API SQL(概念、依赖图、Table程序依赖、扩展依赖)
  3. Sass学习之路(3)——Sass编译
  4. 经典的机器学习方面源代码库(非常全,数据挖掘,计算...)
  5. opengl绘制的点不显示是什么原因_中考后为什么不允许复读?原因主要在以下5点,你都清楚吗?...
  6. ApplePay支付使用
  7. 图像分割(二):高斯混合模型(GMM)方法
  8. Rust: 逆序输出str
  9. linux命令从哪里敲,Linux 笔记本基于“敲打”的命令
  10. 人工智能与安全论坛:智能与安全的融合与对抗
  11. 如何学习Java软件开发
  12. EasyUI——基本布局
  13. 简单易懂的现代魔法——Play Framework攻略1
  14. 贴片电阻各种封装规格及阻值标注方法
  15. 第二节课 上身肌肉锻炼
  16. 基于Python语言的文件与文件夹管理
  17. 建造者模式(Builder)---创建型
  18. DUL模型详解——代码+原理——Data Uncertainty Learning
  19. Kafka学习——基于已有zookeeper集群实现kafka的集成
  20. hacker入门专业术语

热门文章

  1. AUTOCAD2020入门学习笔记(一)
  2. HTML是一种标识语音,HTML实现网页端语音输入(语音识别,语义理解,olami)
  3. 设计实现信用卡用户定时还款功能
  4. Apples Prologue(吃苹果问题) C++
  5. linode购买服务器
  6. SpringBoot-Rabbit MQ-设置手动确认ACK-Channel shutdown异常
  7. 无线接入控制服务器(ac),无线AP控制器是什么?无线AP与无线AC的区别
  8. 【day08~10】Java面向对象基础认识
  9. App logcat日志分析
  10. python发送邮件 SMTP socks代理