Loading

差分入门两题 ——ACwing100 递增序列

 

 

 

 

 

  此题重点在于区间加/减 ,且最终序列的特征是差值均为0,对一个区间加不影响中间的差值

  于是构差分数组,有:

  

 

 

   为了使得最终差分数组均为0(除了d[1]) ,我们应该贪心地选择[l,r]  ,这样一来,算出负数的和的绝对值,正数的和的绝对值,取最小值再加上绝对值的差的绝对值,就是需要操作的最少次数。(贪心)

   而最终可能的大小,也就是d[1]的可能大小,某个正数或者负数可以通过与d[1]或者d[n+1]配对,总共配对abs(z-f)次,与d[1]可能配对 0,1,2,3…abs(z-f) 次,所以d[1]的值有abs(z-f)+1次

   AC CODE:

  

import java.math.BigInteger;
import java.math.*;
import java.io.*;
import java.util.Scanner;

public class Main{
    static  int maxn = 100000 + 5;
    static long a[] = new long [maxn];
    public static void main(String[] args){
        int T;
        int n;
        Scanner in = new Scanner (System.in);
        n = in.nextInt();
        long r,l;
        r = l = 0;
        for(int i = 0; i < n; i++){
            a[i]=in.nextLong();
            if(i > 0) {
                if (a[i] - a[i - 1] > 0) l += a[i] - a[i - 1];
                else r += a[i - 1] - a[i];
            }
        }
        System.out.println(Math.min(l,r)+Math.abs(l-r));
        System.out.println(1+Math.abs(l-r));
        in.close();
    }
}

 

posted @ 2020-06-25 00:04  MQFLLY  阅读(146)  评论(0编辑  收藏  举报