zoukankan      html  css  js  c++  java
  • 洛谷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
    ",sum) ; 
    14     return 0 ;
    15 }
  • 相关阅读:
    Tjoi 2017 异或和
    Noi 十连测 建造记者站
    Noi 十连测 基因改造计划
    Noi 十连测 人生的经验
    NOI 十连测 Round 5 T2 运河计划
    NOI 十连测 Round 5 T1
    【ZJOI2018】迷宫
    BZOJ 十连测 day5 T3
    BZOJ 十连测 可持久化字符串
    BZOJ 十连测 二进制的世界
  • 原文地址:https://www.cnblogs.com/third2333/p/7127870.html
Copyright © 2011-2022 走看看