1. 程式人生 > WINDOWS開發 >AcWing100 增減序列(差分)

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