题意:给你一段序列,一次操作:[l,r]内所有数+1
初始序列全为0
现在给你最后序列,问最少操作几次能达到这样的序列
蒟蒻表示秒想到------差分啊
每次差分必有一个+1,一个-1
把差分数组求出来,累加(绝对值之和),
每次操作一个+1,一个-1,所以最后/2就是答案。。。。
#include<cstdio> #include<iostream> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define int long long #define olinr return #define _ 0 #define love_nmr 0 #define DB double int cha[105050]; inline int read() { int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) { if(ch=='-') f=-f; ch=getchar(); } while(isdigit(ch)) { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*f; } inline void put(int x) { if(x<0) { x=-x; putchar('-'); } if(x>9) put(x/10); putchar(x%10+'0'); } inline int abss(int x) { if(x<0) return -x; return x; } int n; signed main() { n=read(); int x=0,y=0; for(int i=1;i<=n;i++) { x=read(); cha[i]=x-y; y=x; } cha[n+1]=-y; int ans=0; for(int i=1;i<=n+1;i++) ans+=abss(cha[i]); put(ans>>1); olinr ~~(0^_^0)+love_nmr; }