题解 | #积木大赛# && 道路铺设

链接:https://ac.nowcoder.com/acm/contest/19483/I
简要题意:对于一个全0数组,每次可以选一段[l,r],将里头元素全部+1.问要想生成给定数组a,至少需要几次操作
分析:差分数组的应用
考虑差分数组。每次选择长度[l,r]进行+1时,差分数组中d[r+1]-1,d[l]+1.因此,差分数组中的正数和与负数和相等,且恰好等于操作次数
需要注意全0数组的条件,读入a[1]到a[n]之后,记得考虑a[0]=0和a[n+1]=0

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))

int a[100010];
int d[100010];
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n;
    cin >> n;
    ll ans=0;
    for(int i=1;i<=n;i++){
        cin >> a[i];
        d[i]=a[i]-a[i-1];
        if(d[i]>0)    ans+=d[i];
    }
    a[n+1]=0;
    d[n+1]=a[n+1]-a[n];
    if(d[n+1]>0)    ans+=d[n+1];
    cout << ans;
    return 0; 
}

道路铺设https://ac.nowcoder.com/acm/contest/19483/J
每次选一段[l,r]的区间,将里头数字-1,问减几次后能变成全0
道理同上,考虑差分数组中正数的总和

全部评论

相关推荐

07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务