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. 标准化条件变量 -- condition_variable
  2. The executable was signed with invalid entitlements
  3. css字体自定义,bootstrap自定义字体
  4. getallheaders函数在服务器报500错误_「干货」服务器性能优化的8种常用方法
  5. UVA1276 Network
  6. 好戏常有:CSW和BU撕逼,Cobra劝架
  7. CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布
  8. 分享一下滑动验证码的模拟滑动攻克
  9. 中国税负68%,世界排名12
  10. HTML CSS 个人网页设计
  11. 1.C语言0基础自学-从第一行代码开始
  12. 阅读开源引擎源代码的方式学习游戏引擎好吗?
  13. 用来做重试的库Tenacity
  14. 节理玫瑰花图怎么画,节理玫瑰花图和地质图.ppt
  15. LR 的上传文件与下载文件
  16. iPhone/iPad/Android UI尺寸规范
  17. 【GreenPlum】使用gprecoverseg报gprecoverseg failed
  18. UOJ #496.秋蝉鸣泣之时
  19. c语言程序进制,C语言之进制详解
  20. Java 递归实现汉诺塔问题

热门文章

  1. 腾讯魏巍:Eunomia云原生资源编排优化
  2. c语言 char * 遍历,使用指针遍历char数组
  3. 沪牌每月价格预测模型
  4. python爬取豆瓣读书,python爬取数据豆瓣读书
  5. 一文了解间隙配合、过盈配合、过渡配合的特点、区别及适用范围
  6. 米3换完屏信号无服务器,米3更新系统找不到云服务器
  7. 1941 Scary Martian Word
  8. C++实现一个线程池
  9. [SDOI2015]寻宝游戏
  10. ADBPGGreenplum 成本优化之磁盘水位管理