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 }

 

posted @ 2020-09-15 00:13  Alpaca00  阅读(183)  评论(0)    收藏  举报