AcWing100 增减序列(差分)
Posted ctyakwf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于AcWing100 增减序列(差分)的主要内容,如果未能解决你的问题,请参考以下文章