码迷,mamicode.com
首页 > Windows程序 > 详细

AcWing100 增减序列(差分)

时间:2020-05-29 23:41:33      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:ons   main   scan   long   gif   数组   class   bsp   typedef   

看到区间修改,可以想想差分,这题显然就是在差分数组后,将b1-bn变为0,而个数就是b1的个数

最优答案肯定是刚开始挑一个正的和一个负的消掉,当某一个数被消完后,后面的就是跳同一种操作。

那么个数就是正数-负数的绝对值+1

技术图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+10;
int a[N],b[N];
int main(){
    int i;
    int n;
    cin>>n;
    ll cnt1=0;
    ll cnt2=0;
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
        b[i]=a[i]-a[i-1];
        
    }
    for(i=2;i<=n;i++){
        if(b[i]>0)
            cnt1+=b[i];
        if(b[i]<0)
            cnt2-=b[i];
    }
    cout<<max(cnt1,cnt2)<<endl;
    cout<<abs(cnt1-cnt2)+1<<endl;
}
View Code

 

AcWing100 增减序列(差分)

标签:ons   main   scan   long   gif   数组   class   bsp   typedef   

原文地址:https://www.cnblogs.com/ctyakwf/p/12989843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!