洛谷 P2672 推销员 解题报告
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 推销员 解题报告相关推荐
- 洛谷1042 乒乓球 解题报告
洛谷1042 乒乓球 本题地址: http://www.luogu.org/problem/show?pid=1042 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球 ...
- 洛谷P2672 推销员
沙雕贪心...... 我一开始想的是倒着来,每次减去一个. 然后我们就有两个决策:去掉最后一个/去掉前面某一个. 然后第一个决策用并查集维护,第二个决策用线段树即可.仔细想想觉得普及组不会考这种东西, ...
- 洛谷 [POI2007]BIU-Offices 解题报告
[POI2007]BIU-Offices 题意 给定\(n(\le 100000)\)个点\(m(\le 2000000)\)条边的无向图\(G\),求这个图\(G\)补图的连通块个数. 一开始想了半 ...
- 洛谷 P3959 宝藏 解题报告
P3959 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小 ...
- 【洛谷月赛】洛谷三月月赛题解报告
昨天就是洛谷三月月赛,小编考的并不好,才31分,隔壁大佬50分,于是小编决定改一改题,先看第一题: P5238 整数校验器 题目描述 有些时候需要解决这样一类问题:判断一个数 x 是否合法. x 合法 ...
- 洛谷P5082 成绩解题思路及题解
讨论 858 通过 3.6K 提交 题目提供者 vercont 评测方式 云端评测 标签 难度 入门难度 时空限制 1000ms / 128MB 提交 题解 提示:收藏到任务计划后,可在首页查看. 最 ...
- 【洛谷】P4147 玉蟾宫 解题报告
[洛谷]P4147 玉蟾宫 解题报告 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...
- 【洛谷新手村解题报告二】C++语言,一题多解,思路和WA反思
[洛谷新手村解题报告二] 循环!循环!循环! 数组 继续上次的一!开始循环第二题 循环!循环!循环! 第二题 级数求和 [1/2] 已知:Sn= 1+1/2+1/3+-+1/n 显然对于任意一个整数 ...
- 【洛谷新手村解题报告三 字符串/递归前】C++语言,一题多解,思路和WA反思
[洛谷新手村解题报告三] 简单字符串 过程函数与递归 首先下一部分!字符串,这个前面两题新手跳过吧 简单字符串 第三题 统计单词数 [2/2] 给定一个单词,请你输出它在给定的文章中出现的次数和第一次 ...
- 洛谷【C++编程基础】递归函数初步 专题解题报告
洛谷[C++编程基础]递归函数初步 专题解题报告 T1-T89304 递归求和 题目描述 用递归的方法求1+2+3+4+-+(n-1)+n的值. 输入格式 一个整数n.(1<=n<=100 ...
最新文章
- 标准化条件变量 -- condition_variable
- The executable was signed with invalid entitlements
- css字体自定义,bootstrap自定义字体
- getallheaders函数在服务器报500错误_「干货」服务器性能优化的8种常用方法
- UVA1276 Network
- 好戏常有:CSW和BU撕逼,Cobra劝架
- CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布
- 分享一下滑动验证码的模拟滑动攻克
- 中国税负68%,世界排名12
- HTML CSS 个人网页设计
- 1.C语言0基础自学-从第一行代码开始
- 阅读开源引擎源代码的方式学习游戏引擎好吗?
- 用来做重试的库Tenacity
- 节理玫瑰花图怎么画,节理玫瑰花图和地质图.ppt
- LR 的上传文件与下载文件
- iPhone/iPad/Android UI尺寸规范
- 【GreenPlum】使用gprecoverseg报gprecoverseg failed
- UOJ #496.秋蝉鸣泣之时
- c语言程序进制,C语言之进制详解
- Java 递归实现汉诺塔问题