题意:从左往右跳箱子,每个箱子有金币数量,只能从矮处向高处跳,求最大可获得金币数,数据规模1<=n<=1e5.

显然是一个dp的问题,不难得出dp[ i ] = max(dp[j] )+val [ i ] ,j < i ; 第一眼会想到o(n^2)的算法,显然会超时,这个时候就需要用线段树维护最大值,将复杂度降低到o(nlogn)

首先离散化处理,将高度从小到大排序,并使用unique函数去重,之后每个高度就可以映射为它的下标pos,然后用线段树维护每个下标对应的最优解bestans [ pos ] ,每当向后进行新的决策时,

先找出状态转移方程中的max( dp [ j ] ) ,线段树操作是o(logn)的,然后用dp [ i ] = max( dp [ j ])+val[ i ] 更新线段树中 ( h[ i ] 对应下标pos ) bestans[ pos ] 的值

#include<bits/stdc++.h>
#define N 100050
#define debug cout<<"???"<<endl;
using namespace std;
int val[N],mx[N<<],h[N];
void pushup(int rt)
{
mx[rt]=max(mx[rt<<],mx[rt<<|]);
}
int query(int L,int R,int l,int r,int rt)
{
if(L>R)return ;
if(L<=l&&r<=R)return mx[rt];
int m=(l+r)>>;
int ans=;
if(L<=m)ans=max(ans,query(L,R,l,m,rt<<));
if(R>m)ans=max(ans,query(L,R,m+,r,rt<<|));
return ans;
}
void updata(int pos,int val,int l,int r,int rt)
{
if(l==r){
mx[rt]=val;
return;
}
int m=(l+r)>>;
if(pos<=m)updata(pos,val,l,m,rt<<);
if(pos>m)updata(pos,val,m+,r,rt<<|);
pushup(rt);
}
void init()
{
memset(mx,, sizeof(mx));
}
int main()
{
int n,x;
while(cin>>n) {
init();
vector<int>ve;
for (int i = ; i <= n; i++) {
scanf("%d%d",&h[i],val+i);
ve.emplace_back(h[i]);
}
int ans=;
sort(ve.begin(),ve.end());
unique(ve.begin(),ve.end());
for(int i=;i<=n;i++)
{
int pos=int(lower_bound(ve.begin(),ve.end(),h[i])-ve.begin()+);
int tmp=query(,pos-,,int(ve.size()),);
updata(pos,tmp+val[i],,int(ve.size()),);
ans=max(ans,tmp+val[i]);
}
cout<<ans<<endl;
}
return ;
}

最新文章

  1. ActiveMQ与WebSocket的结合应用
  2. spring mvc(2):请求地址映射(@RequestMapping)
  3. Android中Button、ImageButton、ImageView背景设置区别
  4. ok6410串口裸机总结
  5. 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8)
  6. How to say all the keyboard symbols in English and Chinese
  7. sqlserver 字符串处理函数解释
  8. Lintcode--001(比较字符串)
  9. C相关的图书(链接不可用)
  10. Linux CentOS下MySQL的安装配置之浅谈
  11. Windows程序设计学习笔记(五)——菜单资源和加速键的使用
  12. memcache 和 redis 之间的区别
  13. PYTHON语言书库
  14. VMware设置inter共享连接出现空值
  15. IO 多路复用是什么意思?
  16. Unity Shader 设置纹理采样tex2D过滤方式
  17. 深入浅出 MappedByteBuffer
  18. ft,dtft,dft的关系(转载)
  19. ul,li设置inline-block缝隙
  20. kuangbin专题十六 KMP&amp;&amp;扩展KMP HDU3746 Cyclic Nacklace

热门文章

  1. bootstrap 的 datetimepicker,同时有日期和时间, 且开始时间要早于结束时间
  2. Java-Class-@I:lombok.extern.slf4j.Slf4j
  3. qemu通过命令行直接引导linux内核启动
  4. CPU指令集的虚拟化(x86)
  5. 剑指offer第二版面试题1:数组中重复的数字(JAVA版)
  6. ICPC Asia Nanning 2017 I. Rake It In (DFS+贪心 或 对抗搜索+Alpha-Beta剪枝)
  7. IceCTF-Matrix
  8. bigger is greater
  9. 注册页面-使用form模块搭建
  10. Oracle导出存储过程对象