首页 > 代码库 > 洛谷P1969 积木大赛 贪心 差分
洛谷P1969 积木大赛 贪心 差分
洛谷P1969 积木大赛
贪心
考虑差分
对区间 [l,r]+1 在差分数组上相当于 d[ l ]++ ; d[ r+1 ]-- ;
那么你得到原数组的差分数组后
当d[ i ] = x 则你需要 对 以 i 为左端点 右端点未知的一个区间加x次
且这x加的可能不是同一个区间
所以最后只要将差分数组中所有正数加上去就行了
同样其实也可以用负数算的,但是负数算的话,要加上 d[ n+1 ] 即 a[ n+1 ] - a[ n ]
或者另一种思路
对于一段上升(不下降)区间,我们在搭最高层时可以把下面一起搭了
而如果这个区间开始下降,那么我们进入另一个区间,这个上升区间中
的最小值以下部分都可以在上个区间搭完,所以他的消耗就是本区间最大减最小(第一段减0)
复杂度O(n) 啦啦啦
1 #include <cstdio> 2 using namespace std ; 3 4 const int N = 100011 ; 5 int n,sum ; 6 int a[N] ; 7 8 int main() 9 { 10 scanf("%d",&n) ; 11 for(int i=1;i<=n;i++) scanf("%d",&a[ i ]) ; 12 for(int i=1;i<=n;i++) if(a[ i ]-a[i-1]>0) sum+=a[ i ] - a[ i-1 ] ; 13 printf("%d\n",sum) ; 14 return 0 ; 15 }
洛谷P1969 积木大赛 贪心 差分
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。