AcWing AcWing 100. IncDec序列 题解
链接:https://www.acwing.com/problem/content/102/
题意:

做法:
出现区间加减可以试着和差分数组联系起来,观察差分数组的性质之后发现每次区间+1或者-1都是让差分数组某位+1,然后另一位-1.
知道这点之后答案就显而易见了
代码:
1 /* 2 link: https://www.acwing.com/problem/content/102/ 3 tags: chafen 4 */ 5 #include<bits/stdc++.h> 6 #define to_l(a) ((a)<<1) 7 #define to_r(a) ((a)<<1|1) 8 #define lowbit(a) ((a)&(-a)) 9 using namespace std; 10 typedef long long int ll; 11 typedef unsigned long long int ull; 12 const int int_inf=0x3f3f3f3f; 13 const ll ll_inf=0x3f3f3f3f3f3f3f3f; 14 const int max_n=1e5+5; 15 ll d[max_n],num[max_n]; 16 int main() 17 { 18 ios::sync_with_stdio(false); 19 cin.tie(0); 20 int i,j; 21 int n,m; 22 cin>>n; 23 for(i=1;i<=n;i++){ 24 cin>>num[i]; 25 d[i]=num[i]-num[i-1]; 26 } 27 ll a=0,b=0; 28 for(i=2;i<=n;i++){ 29 if(d[i]>0){ 30 a+=d[i]; 31 } 32 if(d[i]<0){ 33 b-=d[i]; 34 } 35 } 36 cout<<min(a,b)+abs(a-b)<<endl; 37 cout<<abs(a-b)+1<<endl; 38 return 0; 39 }

浙公网安备 33010602011771号