zoukankan      html  css  js  c++  java
  • AcWing100 增减序列(差分)

    看到区间修改,可以想想差分,这题显然就是在差分数组后,将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
  • 相关阅读:
    申请奖励加分
    寒假学习01
    加分项及建议
    12月30日总结
    12月17日 期末总结
    12月31日总结
    12月15日总结
    12月28日总结
    01月03日总结
    01月05日总结
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12989843.html
Copyright © 2011-2022 走看看