【NOIP】提高组2013 积木大赛

【算法】找规律(听说还有写RMQ的www)

【题解】ans+=(a[i]-a[i-1])  (i=1...n)(a[i]>a[i-1])

后面比前面大k,说明要新叠加k个区间来达到所需高度。(看似很复杂的区间覆盖问题,从前往后扫描就很容易得到贪心策略)

#include<cstdio>
int n,ans,a[100010];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
     {
         scanf("%d",&a[i]);
         if(a[i]>a[i-1])ans+=(a[i]-a[i-1]);
     }
    printf("%d",ans);
    return 0;
}
View Code

 

顺便一提,通过差分将区间操作化为两个单点操作也是常见套路

posted @ 2016-08-13 07:53  ONION_CYC  阅读(228)  评论(0编辑  收藏  举报