P2672 推销员

题目描述

阿明是一名推销员,他奉命到螺丝街推销他们公司的产品。螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户。螺丝街一共有N家住户,第i家住户到入口的距离为\(S_i\)米。由于同一栋房子里可以有多家住户,所以可能有多家住户与入口的距离相等。阿明会从入口进入,依次向螺丝街的\(X\)家住户推销产品,然后再原路走出去。

阿明每走1米就会积累1点疲劳值,向第\(i\)家住户推销产品会积累\(A_i\)点疲劳值。阿明是工作狂,他想知道,对于不同的\(X\),在不走多余的路的前提下,他最多可以积累多少点疲劳值。

输入输出格式

输入格式:

第一行有一个正整数\(N\),表示螺丝街住户的数量。

接下来的一行有\(N\)个正整数,其中第\(i\)个整数\(S_i\)表示第\(i\)家住户到入口的距离。数据保证\(S_1≤S_2≤…≤S_n<10^8\)

接下来的一行有\(N\)个正整数,其中第\(i\)个整数\(A_i\)表示向第\(i\)户住户推销产品会积累的疲劳值。数据保证\(A_i<1000\)

输出格式:

输出\(N\)行,每行一个正整数,第\(i\)行整数表示当\(X=i\)时,阿明最多积累的疲劳值。

【数据说明】

对于 20% 的数据, 1≤N≤20 ;

对于 40% 的数据, 1≤N≤100 ;

对于 60% 的数据, 1≤N≤1000 ;

对于 100% 的数据, 1≤N≤100000 。


我就是那种贪心想不全,只会拿暴力数据结构跑的,暴力数据结构还写不出来的那种人。我为什么这么蒻啊。。

稍稍感(胡)性(乱)证明了一下,感觉好像第\(i\)次选的\(i\)个点,第\(i+1\)次全得选上,那好啊我一个个加每次维护一下最大值就好了。

然后开始点线段树\(RMQ\),开始以为只有单点查询,把区间删减放外面做的,发现不对。。

改,写了个区间查询发现复杂度不对,这个lazy咋打啊....摸了半天,发现和普通的求和线段树的区别是在改变时一是得自下往上改,二是碰见修改区间与节点所带区间相等是得改节点儿子的lazy,而更新这个节点。


code:

#include <cstdio>
#define ls id<<1
#define rs id<<1|1
#define mid (L[id]+R[id]>>1)
const int N=100010;
int L[N<<2],R[N<<2],mx[N<<2],pos[N<<2],lazy[N<<2],s[N],a[N];
void build(int id,int l,int r)
{L[id]=l,R[id]=r;if(l==r) {mx[id]=s[l]+s[l]+a[l];pos[id]=l;return;}build(ls,l,mid);build(rs,mid+1,r);if(mx[ls]<mx[rs]){mx[id]=mx[rs];pos[id]=pos[rs];}else{mx[id]=mx[ls];pos[id]=pos[ls];}
}
void push_down(int id)
{mx[id]+=lazy[id];if(L[id]!=R[id]){lazy[ls]+=lazy[id];lazy[rs]+=lazy[id];}lazy[id]=0;
}
void change(int id,int x,int dat)
{if(lazy[id]) push_down(id);if(L[id]==R[id]) {mx[id]=dat;return;}if(x<=mid) change(ls,x,dat);else change(rs,x,dat);if(mx[ls]<mx[rs]){mx[id]=mx[rs];pos[id]=pos[rs];}else{mx[id]=mx[ls];pos[id]=pos[ls];}
}
void change0(int id,int l,int r,int delta)
{if(L[id]==l&&R[id]==r){lazy[id]-=delta;push_down(id);return;}if(r<=mid) change0(ls,l,r,delta);else if(l>mid) change0(rs,l,r,delta);else change0(ls,l,mid,delta),change0(rs,mid+1,r,delta);if(mx[ls]<mx[rs]){mx[id]=mx[rs];pos[id]=pos[rs];}else{mx[id]=mx[ls];pos[id]=pos[ls];}
}
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",s+i);for(int i=1;i<=n;i++)scanf("%d",a+i);build(1,1,n);int loc=0,las=0;for(int i=1;i<=n;i++){int lp=pos[1];las+=mx[1];if(loc<pos[1]){for(int j=loc+1;j<lp;j++)change(1,j,a[j]);if(lp<n) change0(1,lp+1,n,s[lp]<<1);loc=lp;}printf("%d\n",las);change(1,lp,0);}return 0;
}

2018.6.15

转载于:https://www.cnblogs.com/butterflydew/p/9188976.html

洛谷 P2672 推销员 解题报告相关推荐

  1. 洛谷1042 乒乓球 解题报告

    洛谷1042 乒乓球 本题地址: http://www.luogu.org/problem/show?pid=1042 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球 ...

  2. 洛谷P2672 推销员

    沙雕贪心...... 我一开始想的是倒着来,每次减去一个. 然后我们就有两个决策:去掉最后一个/去掉前面某一个. 然后第一个决策用并查集维护,第二个决策用线段树即可.仔细想想觉得普及组不会考这种东西, ...

  3. 洛谷 [POI2007]BIU-Offices 解题报告

    [POI2007]BIU-Offices 题意 给定\(n(\le 100000)\)个点\(m(\le 2000000)\)条边的无向图\(G\),求这个图\(G\)补图的连通块个数. 一开始想了半 ...

  4. 洛谷 P3959 宝藏 解题报告

    P3959 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小 ...

  5. 【洛谷月赛】洛谷三月月赛题解报告

    昨天就是洛谷三月月赛,小编考的并不好,才31分,隔壁大佬50分,于是小编决定改一改题,先看第一题: P5238 整数校验器 题目描述 有些时候需要解决这样一类问题:判断一个数 x 是否合法. x 合法 ...

  6. 洛谷P5082 成绩解题思路及题解

    讨论 858 通过 3.6K 提交 题目提供者 vercont 评测方式 云端评测 标签 难度 入门难度 时空限制 1000ms / 128MB 提交 题解 提示:收藏到任务计划后,可在首页查看. 最 ...

  7. 【洛谷】P4147 玉蟾宫 解题报告

    [洛谷]P4147 玉蟾宫 解题报告 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...

  8. 【洛谷新手村解题报告二】C++语言,一题多解,思路和WA反思

    [洛谷新手村解题报告二] 循环!循环!循环! 数组 继续上次的一!开始循环第二题 循环!循环!循环! 第二题 级数求和 [1/2] 已知:Sn= 1+1/2+1/3+-+1/n 显然对于任意一个整数 ...

  9. 【洛谷新手村解题报告三 字符串/递归前】C++语言,一题多解,思路和WA反思

    [洛谷新手村解题报告三] 简单字符串 过程函数与递归 首先下一部分!字符串,这个前面两题新手跳过吧 简单字符串 第三题 统计单词数 [2/2] 给定一个单词,请你输出它在给定的文章中出现的次数和第一次 ...

  10. 洛谷【C++编程基础】递归函数初步 专题解题报告

    洛谷[C++编程基础]递归函数初步 专题解题报告 T1-T89304 递归求和 题目描述 用递归的方法求1+2+3+4+-+(n-1)+n的值. 输入格式 一个整数n.(1<=n<=100 ...

最新文章

  1. 详细分析JVM内存模型
  2. 缓冲池和String池
  3. POJ 1151 Atlantis 线段树+扫描线
  4. 多线程之CountDownLatch和CyclicBarrier的区别和用法
  5. kotlin泛型类、泛型接口
  6. (简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程
  7. 计算机拼图形 比创意教案,图形联想与创意教案
  8. 手机APP开发常用工具有哪些
  9. macOS Monterey 12.6.2 (21G320) 正式版 ISO、IPSW、PKG 下载
  10. python爬虫百度地图_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)...
  11. python中字符串前的 u, r/R, b的含义
  12. nginx配置介绍(二)
  13. mysql 统计七日留存率_移动APP中,7日留存率到底如何定义?
  14. SQL SERVER 连乘写法
  15. IIS 支持 flv文件播放 (浏览器中可打开一flv文件)
  16. IDEA maven 项目打包:Could not resolve dependencies for project
  17. 服务器托管之数据中心选型
  18. 谷歌 Pixel 手机阻止用户拨打报警电话
  19. 第一篇 消防法及相关法律法规与消防职业道德
  20. 是利用计算机技术实现,计算机技术在智慧交通建设中的应用

热门文章

  1. 一位大牛对于写技术博客的一些建议
  2. MyBatis整合Spring的实现(16)
  3. vs无法启动程序系统找不到指定文件
  4. windows远程ubuntu键盘无法输入
  5. 英特尔Atom处理器出货一亿,庆祝上网本CPU三周岁
  6. 初识Python自动化运维(一)
  7. 腾讯笔试题——java题总结无答案
  8. 传输层安全协议TLS/SSL
  9. Starling MovieClip API
  10. php圆的面积计算公式,圆的面积怎么计算如何求解