【LG5019】[NOIP2018]道路铺设】的更多相关文章

[LG5019][NOIP2018]道路铺设 题面 洛谷 题解 \(NOIP\) 抄 \(NOIP\)差评 设当前做到了位置\(i\) 且\(h_i\) \(-\) \(h_i\)\(_+\)\(_1\) \(=\) \(x\) 若\(x>0\)将\(x\)加入贡献即可 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath>…
目录 @题目描述@ @考场上的思路@ @比较正常的题解@ @题目描述@ 春春是一名道路工程师,负责铺设一条长度为 n 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 n 块首尾相连的区域,一开始,第 i 块区域下陷的深度为 di. 春春每天可以选择一段连续区间 [L,R],填充这段区间中的每块区域,让其下陷深度减少 1.在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 0. 春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 0 . 输入…
前情回顾 前缀和的基础用法戳这里->传送门 众所周知,简单的前缀和解决的一般都是静态查询的问题,例如区间和.区间积等 操作的时候也很简单,就是根据需要来维护一个数组,每次查询的时候就用到tr[r] 与 tr[l - 1]这两个值来得出答案 例如: A 智乃酱的区间乘积 题目描述: 给你一个长度为n的数组tr,m次查询,每次查询给你 l 和 r ,问tr[l] 乘到 tr[r] 后对1e9+7取模是多少 思路: 用到了取模,且查询的时候还涉及到了除法,所以要用逆元,而又因为模数是素数,所以可以用费…
Preface 联赛结束后趁着自己还没有一下子把题目忘光,所以趁机改一下题目. 没有和游记一起写主要是怕篇幅太长不美观. 因此这里我们直接讲题目,关于NOIP2018的一些心得和有趣的事详见:NOIP2018游记 铺设道路 SB到我怀疑人生,难度比小凯的疑惑还低了不知道几个数量级那题我貌似不是很会证. 考场上为了对拍首先写了个暴力分裂区间的贪心,然后一发过了大样例??? 想往数据结构上想,但是考虑这是Day1T1,所以肯定有玄学做法. 积木大赛的原题我是做过的,但是考场上忘了,所以YY了一个循环…
[NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕…
对了我在这里必须讲一个非常重要的事情,就是前天也就是$2019.8.21$的傍晚,我决定重新做人了$!!$ 其实之前没怎么做$Noip$题,那就从现在开始叭…
\(\mathcal{Description}\)   Link.   给定一个长为 \(n\) 的非负整数序列 \(\lang a_n\rang\),你可以进行如下操作: 取 \([l,r]\),将其中所有 \(a\) 值 \(-1\): 取 \([l,r]\),将其中奇数下标的 \(a\) 值 \(-1\): 取 \([l,r]\),将其中偶数下标的 \(a\) 值 \(-1\).   求至少需要几次操作使得所有 \(a\) 值变为 \(0\).   \(n\le10^5\),数据组数 \(…
[NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要几次操作. 思路: 差分后,将大于\(0\)的差分累加入答案即可. 源代码: #include<cstdio> #include<cctype> #include<algorithm> inline int getint() { register char ch; whil…
题目描述 春春是一名道路工程师,负责铺设一条长度为 \(n\) 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 \(n\) 块首尾相连的区域,一开始,第 \(i\) 块区域下陷的深度为 \(d_i\)​ . 春春每天可以选择一段连续区间\([L,R]\) ,填充这段区间中的每块区域,让其下陷深度减少 \(1\).在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 \(0\) . 春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 \(0\)…
题目描述 春春是一名道路工程师,负责铺设一条长度为 n 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 n 块首尾相连的区域,一开始,第 i 块区域下陷的深度为 di. 春春每天可以选择一段连续区间[L,R][L,R] ,填充这段区间中的每块区域,让其下陷深度减少 1.在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 0 . 春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 0 . 输入格式 输入文件包含两行,第一行包含一个整数 n,表示…
题目链接 https://www.luogu.org/problem/P5019 解题思路 一道典型的贪心题. 假设从左往右填坑,如果第i个深与第i+1个,那么第i+1个就不需要额外填: 如果第i+1个大于第i个,就需要填i+1-i的深度,所以就相当于把>0的差分数组加起来就AC了. AC代码 #include<iostream> #include<cstdio> using namespace std; ]; long long ans; int main(){ int n…
原题,而且还是CCF自己的 考虑对于一段最长不上升序列,无论如何都至少有序列第一个数的贡献,可以知道,这个贡献是可以做到且最少的 然后对于序列最后一位,也就是最小的那一个数,可以和后面序列拼起来的就拼起来,所以后面的序列需要补偿的贡献就是差分 简化一下, \(ans=\sum_{i=1}^n\max\{0,(a_i-a_{i-1})\}\) #include<bits/stdc++.h> #define ui unsigned int #define ll long long #define…
和NOIp2013 积木大赛一模一样 我在堆一格的时候,我把它尽量地往右去延伸 于是如果对于一个i,a[i-1]<a[i],那i在之前一定只堆过a[i-1]那么多,所以要再堆a[i]-a[i-1] 如果a[i-1]>=a[i],那i肯定都堆过了 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> using na…
LG传送门 考场上写的\(O(nlogn)\)做法,具体思想是把深度从低到高排个序,开一个标记数组,每次加入的时候标记当前位置并判断:如果当前加入的位置两边都被标记过,则下次的贡献-1,若两边都没有被标记过,则贡献+1.预先把数组的0和n+1标记一下. 考场代码:(考场的两格缩进真的谜) #include<cstdio> #include<algorithm> #define R register #define I inline using namespace std; cons…
传送门 NOIP2013原题 貌似官方数据都是一模一样的 以前写过竟然毫无印象? 考场上自己瞎JB推结论 显然,如果连续的两端区间可以左边区间减 k 次,右边区间也减 k 次 那么把两个区间合并起来一起减 k 次一定是更优的 所以先考虑把整个区间拿来减几次,显然最多减的次数就是整个区间的最小值 然后此时最小值已经为零了,以最小值的位置分成左右两个区间继续同样处理就好了 如果每个区间都扫一遍最小值复杂度可以卡成 $O(n^2)$,(单调序列) 所以区间最小值容易想到ST表 然后复杂度 $O(nlo…
题目链接:https://www.luogu.org/problemnew/show/P5019 花絮:普及蒟蒻终于A了一道提高的题目?emm,写一篇题解纪念一下吧.求过! 分析: 这道题我们可以采用一种略带数学&贪心的思想来解决,其实也可以使用差分,但并没有必要了.因为任何一个点都可以单独减1. 我们可以遍历每个点,然后发现当后一个点b的值大于前一个点的值时,我们需要把b减去前面的那个值(或再之前的),来实现最优解. 因为我们发现,要最短的天数就必须每天最长的修理距离,最长的修理距离也就是要保…
$Luogu$ 去年$Noip$的时候我并没有做过原题,然后考场上也没有想出正解,就写了个优化了一点的暴力:树状数组+差分,然后就$A$了$ovo$. $Sol$ 只要$O(N)$扫一遍,只要当前值比前一个值大,那么答案就累计这两个值的差的绝对值.$over.$ $Code$ #include<iostream> #include<cstdio> #define rg register #define ll long long using namespace std; int re…
题目描述 春春是一名道路工程师,负责铺设一条长度为 \(n\) 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 \(n\) 块首尾相连的区域,一开始,第 \(i\) 块区域下陷的深度为 \(d_i\) . 春春每天可以选择一段连续区间 \([L,R]\) ,填充这段区间中的每块区域,让其下陷深度减少 \(1\).在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 \(0\) . 春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 \(0\)…
题目描述 春春是一名道路工程师,负责铺设一条长度为 \(n\) 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 \(n\) 块首尾相连的区域,一开始,第 \(i\) 块区域下陷的深度为 \(d_i\). 春春每天可以选择一段连续区间 \([L,R]\) ,填充这段区间中的每块区域,让其下陷深度减少 \(1\).在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 \(0\) . 春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 \(0\) .…
原题:NOIP2013D1T1 积木大赛 题目地址:P5019 铺设道路 思路:玄学瞎搞 将每块区域插入一个小根堆,这里的小根堆用优先队列实现,即运用一个 \(pair\) , \(first\) 为 \(-d_i\) , \(second\) 为 \(i\) 每次取出堆顶,与上一次取出的数作差得到 \(d\) (如果是第一个数则上一个数为0), \(d\) 即为从上一个深度还需向下多深到现在的深度 而这部分所需的天数为 \(d×num\) , \(num\) 为这部分深度被分成了多少个部分,即…
题目描述 春春是一名道路工程师,负责铺设一条长度为 nn 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 nn 块首尾相连的区域,一开始,第 ii 块区域下陷的深度为 d_idi​ . 春春每天可以选择一段连续区间[L,R][L,R] ,填充这段区间中的每块区域,让其下陷深度减少 11.在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 00 . 春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 00 . 输入格式 输入文件包含两行,第一行…
Code: #include<cstdio> using namespace std; int main() { int last=0,ans=0; int n;scanf("%d",&n); for(int i=1;i<=n;++i) { int t;scanf("%d",&t); if(t>last)ans+=t-last; last=t; } printf("%d\n",ans); }…
题目链接 众所周知,这道题和积木大赛是同一道题 题意就是给出一段自然数序列,每次操作\((L,R)\)把区间\([L,R]\)的数全部减一,不允许出现负数,问把序列变为零的最小操作次数 贪心做法 样例 6 4 3 2 5 3 5 大概长这个样子 我们考虑第一列的四块格子,最少需要\(4\)次操作给消除掉 在考虑第二列的\(3\)个格子时,发现都可以在第一列的\(4\)次操作中一起消除掉 第三列的格子也都可以一起消除掉 考虑第四列,我们可以发现,第四列下面的两个格子在前面的操作中可以一起消除,但是…
#include<bits/stdc++.h> using namespace std; ]; ; int main() { cin>>n; ;i<=n;i++) cin>>a[i]; ;i<=n;i++) ]) ans+=a[i]-a[i-]; cout<<ans+a[]; ; }…
题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把所有深度为d的坑全都填成深度为 \(d-1\) ,然后去填深度为 \(d-1\) 的坑-- 实现代码如下(手动开启了O2优化,不然会TLE2组): #include <bits/stdc++.h> using namespace std; #pragma GCC optimize(2) const…
嗯... 题目链接:https://www.luogu.org/problem/P5019 首先简化一下题意: 给定一个长为N的数组,每次操作可以选择一个区间减去1,问最少多少次操作可以将数组中的数全变成0 N≤100000 思路: 首先对于第一个数字d_1我们至少需要在上面花d_i次,然后考虑每一个d_i,对于它比上一个数字小(或等于)的那一部分, 我们可以在对上一个数字操作时一块操作.如果d_i > d_i - 1,也就是说它比上一个数大,那么我们就必须多进行d_i - d_i - 1次操作…
水题,水得好无语 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register int a = (b); a >= (c); --…
NOIP2018游记 - 前行记录 NOIP2018 完跪……滚回学校考半期 QwQ 这篇不是题解 awa ,题解之后会发布的,毕竟我还没有AC呢 又及……G2020 陌路笙歌 - 再见(╯▽╰) 感悟 第一次考提高组,之前和将要AFO的G2020一起培训了很久,感触颇深~毕竟距离AFO就只剩两年了,还是抓紧吧 星期五试机的时候有一点爆炸……O(nlogn) 的最长上升子序列都写挂了. 考试的时候根据策略先扫了一遍所有的题——嗯~好!没几道会做的 QwQ Day1 划水 一群人说AK Day1……
前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). 这次\(NOIP\ Day1\)的题目听说很简单(毕竟是三道原题),然而我\(T3\)依然悲剧地写炸了. 很奇怪啊,毕竟在几乎所有民间数据中我这题都\(AC\)了... ... \(T1\):铺设道路(点此看题面) 另一个题面 我的思路是,每个元素肯定都是由其左右两边第一个比它小的数转移而来的. 于是就开了两个单调栈,前后各扫一遍,求出了答案. 然而貌似还有更简单的解法?但我不会. 代码如下…
NOIp2018 身为一名只会PJ的蒟蒻 我带着试试的心态(为了省一次中考哈哈哈) 同时报了PJ和TG??! TGD1T1是一道洛谷原题 都是提高组签到题 铺设道路 本蒻好像A了 然而某些dalao们说线段树也能做... 我还是玩自己的O(n)吧!! T2稍微上升了些难度 货币系统 本蒻先打了0.5h的dfs 然而连样例都过不了 气得O(t*n^2*a[n])可行性完全背包 结果就过了大样例啧啧~~ 洛谷上提交90分,TLE了两个点 T3不会,能搞出多少部分分算多少啦 D2更不必说了 D2T1d…