HDU 3607 线段树
来源:互联网 发布:数据监控系统毕业设计 编辑:程序博客网 时间:2024/06/08 03:04
点击打开链接
题意:个n个点的高度以及点上的金子数,现在从1开始走到n,要求每走一步高度要严格递增,且只能向右走,问最多可以捡到多少金子
思路:这种题看起来像是dp,因为求最多什么的嘛,但是其实用线段树就可以求解,然后数据范围过大我们需要离散化一下,然后遍历每一个点,找到它的排名,然后询问1到它的排名下一位的最大值,加上它自己的金子就是走到这的最多可以获得的,然后更新这个点的金子数,依次下去到n就直接求出来了
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const ll INF=0x3f3f3f3f3f3f3f3fll;const int maxn=100010;int max1[maxn<<2];void update(int pos,int val,int le,int ri,int node){ if(le==ri){ max1[node]=val; return ; } int t=(le+ri)>>1; if(pos<=t) update(pos,val,le,t,node<<1); else update(pos,val,t+1,ri,node<<1|1); max1[node]=max(max1[node<<1],max1[node<<1|1]);}int query(int l,int r,int le,int ri,int node){ if(l<=le&&ri<=r) return max1[node]; int t=(le+ri)>>1,ans=-inf; if(l<=t) ans=max(ans,query(l,r,le,t,node<<1)); if(r>t) ans=max(ans,query(l,r,t+1,ri,node<<1|1)); return ans;}int num[maxn],tmp[maxn],val[maxn];int main(){ int n; while(scanf("%d",&n)!=-1){ for(int i=1;i<=n;i++){ scanf("%d%d",&num[i],&val[i]); tmp[i-1]=num[i]; } int k=1; sort(tmp,tmp+n); for(int i=1;i<n;i++){ if(tmp[i]!=tmp[i-1]) tmp[k++]=tmp[i]; } memset(max1,0,sizeof(max1)); int ans=-inf; for(int i=1;i<=n;i++){ int ttt=lower_bound(tmp,tmp+k,num[i])-tmp+1; int ans1; if(ttt==1) ans1=0; else ans1=query(1,ttt-1,1,k,1); ans=max(ans,ans1+val[i]); update(ttt,ans1+val[i],1,k,1); } printf("%d\n",ans); } return 0;}
0 0
- HDU 3607 线段树
- HDU 3607 线段树+DP
- hdu 3607 Traversal 线段树
- HDU 3607 Traversal (线段树)
- HDU 3607 线段树+离散化+DP
- hdu 1754 线段树
- hdu 1754 线段树
- HDU 1698 线段树
- hdu 1754 线段树
- 【线段树】hdu 1754
- hdu-1166 线段树
- HDU-2688 线段树
- HDU 4027 线段树
- HDU-1166 线段树
- hdu 1166 线段树
- hdu 1754 线段树
- hdu 1754 线段树
- hdu 4027#线段树
- android中TextView中文字从数据库中读取并实现换行
- 自定义类,外面调用的属性是只读,但是可以在自定义类内部设置修改属性
- OpenJ_Bailian 4081 树的转换 数据结构
- App安全之网络传输安全
- 重排链表
- HDU 3607 线段树
- Embedded Linux S3C2440 environment setup
- 【VS开发】【智能语音处理】语音信号处理之(四)梅尔频率倒谱系数(MFCC)
- 区间信息维护与查询 2016.10.13
- cocos2dx-3.10 聊天系统实现(C++实现)
- Android调试之使用真机
- 2016.7.14 夏令营 Day7
- 新版微信-微信公众号一键关注解决办法
- 程序员接私活的渠道