Codeforces Round #331 (Div. 2) B. Wilbur and Array

原创 2015年11月17日 16:10:12
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Wilbur the pig is tinkering with arrays again. He has the array a1, a2, ..., an initially consisting of n zeros. At one step, he can choose any index i and either add 1 to all elements ai, ai + 1, ... , an or subtract 1 from all elements ai, ai + 1, ..., an. His goal is to end up with the array b1, b2, ..., bn.

Of course, Wilbur wants to achieve this goal in the minimum number of steps and asks you to compute this value.

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 200 000) — the length of the array ai. Initially ai = 0 for every position i, so this array is not given in the input.

The second line of the input contains n integers b1, b2, ..., bn ( - 109 ≤ bi ≤ 109).

Output

Print the minimum number of steps that Wilbur needs to make in order to achieve ai = bi for all i.

Sample test(s)
input
5
1 2 3 4 5
output
5
input
4
1 2 2 1
output
3
Note

In the first sample, Wilbur may successively choose indices 1234, and 5, and add 1 to corresponding suffixes.

In the second sample, Wilbur first chooses indices 1 and 2 and adds 1 to corresponding suffixes, then he chooses index 4 and subtract1.


题意:有n个数a1,a2,a3,a4...an,初始化ai = 0(1<=i<=n)。有两种操作,i到n全部加一,i到n全部减一 (1<=i<=n)。得到b1,b2,b3,b4...bn

两个操作都是对,i到n操作,那肯定是先确定前面的,才能确定后面的。

有了这个思想就可以了。
注意我们敲的代码避免和库函数相同,我就因为写了个abs(int x)就编译错误。
#include
#include
#include
#include
using namespace std;

const int N = 200010;
long long a[N];

long long f(long long x)
{
    if(x > 0) return x;
    return -x;
}

int main(void)
{
    int n, i;
    scanf("%d", &n);
    a[0] = 0;
    for(i = 1; i <= n; i++) scanf("%I64d", &a[i]);
    long long ans = 0;
    for(i = 1; i <= n; i++)
    {
        if(a[i] != a[i-1])
        {
            ans += abs( a[i] - a[i-1] );
        }
    }
    printf("%I64d\n", ans);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【Codeforces Round 331 (Div 2)B】【水题 贪心】Wilbur and Array 修改对p位置后的所有位置生效 最少修改次数使得数列变成b

Wilbur and Array time limit per test 2 seconds memory limit per test 256 megabytes ...

Codeforces Round #331 (Div. 2) C. Wilbur and Points 贪心+排序

题目~~ 题意: 有n个坐标,wi为(yi-xi),再给出n个wj(j=0~n), wi==wj 则第i个坐标标号为j,而满足xi...

Codeforces Round #331 (Div. 2) _A. Wilbur and Swimming Pool

A. Wilbur and Swimming Pool time limit per test 1 second memory limit per test 256 megab...

【Codeforces Round 331 (Div 2)A】【水题】Wilbur and Swimming Pool 给出矩形1~4个顶点让你还原矩形

Wilbur and Swimming Pool time limit per test 1 second memory limit per test 256 megabyte...

【Codeforces Round 331 (Div 2)C】【脑洞 SET贪心写法】Wilbur and Points 锯齿图形差值编号,右上角的最大

Wilbur and Points time limit per test 2 seconds memory limit per test 256 megabytes input stan...

Codeforces Round #331 (Div. 2) C. Wilbur and Points

time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandar...

Codeforces Round #331 (Div. 2)-Wilbur and Swimming Pool(模拟)

A. Wilbur and Swimming Pool time limit per test 1 second memory limit per test 256 megab...

Codeforces Round #331 (Div. 2)——C. Wilbur and Points

MD,又因为一个傻逼错误搞了一个下午+一个晚上。。忧桑= = 题意: 现在有n个点,然后给出n个点的x,y坐标。然后这些坐标必须满足条件:比如说分配给点(x,y)的标号是i,那么点(x',y')的标号...

Codeforces Round #312 (Div. 2) B. Amr and The Large Array

time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard...

Codeforces Round #331 D. Wilbur and Trees(概率dp+区间dp)

题意:在一条直线上有n棵树,每棵树的高度都为h,每次等概率的砍掉最左边或最右边的树,一棵树如果被砍掉有p的概率向左倒下,有1-p的概率向右倒下,如果两树之间距离小于h,那么一颗树倒下后可以击中另一棵树...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #331 (Div. 2) B. Wilbur and Array
举报原因:
原因补充:

(最多只允许输入30个字)