YJJ's Salesman

题目链接:HDU - 6447

题意:一个1e9*1e9的地图,要求由(0, 0) -> (1e9, 1e9);只能向下,向右, 向右下移动;地图中有n个点,有宝藏,只有从该点的左上方移动过来才能拿走宝藏,问最多能拿走多少宝藏;

本题和之前做过的一个数星星题有点相似, 题目链接:POJ - 2352

根据题意可知在每一个点能拿到的宝藏一定是其左上方的点,那么就是找这个点的左上方的点的宝藏总和;可以用线段树维护;怎么维护呢?

把y坐标当做需要维护的区间值,然后向线段树里插点,计算的时候就是计算区间[1, y]的值,那么。x坐标一定是由小到大向线段树里插才不会漏掉点,而对于y坐标,要由大到小插点才不会将在计算到同一行的点;这样就只记录了左上方的点;插点的时候插入的值不单单是将要插入的点的宝藏值,还包括有左上方走过来得到的最大宝藏;因为并不是左上方的所有点的宝藏都能拿到手,只计算在左上方能拿到的最大宝藏就ok了, 确实DP的思想;

再一点,本体需要离散化;

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
struct point{int x, y, val;bool operator < (const point& a)const{if(x==a.x) return y>a.y;return x<a.x;}
}p[maxn];
int t[maxn];
struct node{int l, r, val;
}tr[maxn<<2];
void pushup(int m){ tr[m].val=max(tr[m<<1].val, tr[m<<1|1].val);
}
void build(int m, int l, int r){tr[m].l=l;tr[m].r=r;tr[m].val=0;if(l==r) return;int mid=(l+r)>>1;build(m<<1, l, mid);build(m<<1|1, mid+1, r);
}
void updata(int m, int x, int val){if(tr[m].l==x&&tr[m].r==x){tr[m].val=max(tr[m].val, val);return;}int mid=(tr[m].l+tr[m].r)>>1;if(x<=mid) updata(m<<1, x, val);else updata(m<<1|1, x, val);pushup(m);
}
int query(int m, int l, int r){if(tr[m].l==l&&tr[m].r==r){return tr[m].val;}int mid=(tr[m].l+tr[m].r)>>1;if(r<=mid) return query(m<<1, l, r);else if(l>mid) return query(m<<1|1, l, r);else return max(query(m<<1, l, mid), query(m<<1|1, mid+1, r));
}
int main(){int T;scanf("%d", &T);while(T--){int n;scanf("%d", &n);for(int i=1; i<=n; i++){scanf("%d%d%d", &p[i].x, &p[i].y, &p[i].val);t[i]=p[i].y;}sort(t+1, t+1+n);int cnt=unique(t+1, t+1+n)-(t+1);for(int i=1; i<=n; i++){p[i].y=lower_bound(t+1, t+1+n, p[i].y)-t;}sort(p+1, p+1+n);build(1, 1, n);int ans=0, temp=0;for(int i=1; i<=n; i++){if(p[i].y==1){temp=0;updata(1, 1, p[i].val);}else{temp=query(1, 1, p[i].y-1);updata(1, p[i].y, temp+p[i].val);}ans=max(ans, temp+p[i].val);}printf("%d\n", ans);}return 0;
}

YJJ's Salesman HDU - 6447(线段树 单点更新+DP思想)相关推荐

  1. hdu 5124(线段树区间更新+lazy思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:区间覆盖次数问题. 解题思路:线段树水之. #include<iostream> #in ...

  2. HDU - 1166敌兵布阵+HDU-1754 I Hate It (线段树单点更新——累加/最大值)

    线段树单点更新,模板题 HDU1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...

  3. HDUOJ----1166敌兵布阵(线段树单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  5. 【原创】tyvj1038 忠诚 计蒜客 管家的忠诚 线段树(单点更新,区间查询)...

    [原创]tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询) 最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不 ...

  6. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  7. hdu 3954(线段树区间更新)

    转载标记处:http://www.cnblogs.com/wang-jue/articles/2920341.html 思路:这道题所得到的经验与每个英雄的等级有关,一般的可能就用线段树一直更新到每一 ...

  8. hdu 1698(线段树区间更新)

    解题思路:线段树区间更新水题. #include<iostream> #include<cstdio> #include<cstring> using namesp ...

  9. hdu 1540(线段树单点更新 区间合并)

    解题思路:这一题要求的是连续区间,所以可以把它的子区间合并,这里运用线段树,但是在保存节点信息的方面要做一点修改 lsum:从这个区间的左端点往右能够找到的最大连续区间: rsum:从这个区间的右端点 ...

最新文章

  1. 技术类人员的职业发展的4大方向
  2. flux服务器推消息,在Spring WebFlux响应式处理程序中发送JMS消息:它是否阻塞?
  3. 求连续子数组的最大和
  4. 查看linux系统是32位还是64位
  5. maven中添加servlet、jsp依赖
  6. F5 IIS Log获取客户端源IP
  7. html type=text/css,type=text/css 有什么用啊 ?
  8. SQL Server CLR全功略之一---CLR介绍和配置
  9. CSS: div高度自动适应背景图片的高度 How to get div height to auto-adjust to background size?...
  10. DeFi预言机Umbrella Network与BSC上去中心化杠杆交易协议WOWswap达成合作
  11. 如何在Eclipse下查看JDK源代码
  12. linux 源代码安装mysql5.5_linux下通过源码包安装MySql5.5
  13. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 1270期】
  14. 如何用WGDI进行共线性分析(三)
  15. Bypass注入(WAF绕过)
  16. 【渝粤题库】国家开放大学2021春2107刑法学(1)题目
  17. 《持续交付》书评与访谈
  18. 1586 - Molar mass
  19. rust使用vec在遍历时删除元素
  20. EduSoho开源网校系统源码(附安装教程、下载安装包),支持开源免费下载

热门文章

  1. 【验证狼人杀三行定律】
  2. 20210514:廉价机械键盘学习
  3. ios 仿电脑qq登录界面_iOS开发UI篇—模仿ipad版QQ空间登录界面-阿里云开发者社区...
  4. java 微信时间戳转换工具_微信小程序实现时间戳格式转换
  5. ffmpeg js转换音频_微信FFMPEG 扩展转换音频格式
  6. 路由器,交换机的存储介质的区别
  7. 自考本科英语(二)学习笔记和考试经验
  8. 自动生成小程序的智能建站系统,项目分享
  9. 喜马拉雅主播工具软件:图片OCR文字识别自动转成mp3高品质语音文件
  10. django批量修改table_django formset实现数据表的批量操作的示例代码