[cf] 802 div2 C. Helping the Nature

前言

t a g : tag : tag:差分
传送门:

题意 :
给定多个树木的水分值 − 1 0 9 ≤ a i ≤ 1 0 9 - 10^9 \le a_i \le 10^9 109ai109

你可以进行如下三个操作 :

  1. 1... i 1...i 1...i的树木的水分 − 1 -1 1
  2. i , i + 1.... n i,i+1....n i,i+1....n的树木的水分 − 1 -1 1
  3. 将所有树木的水分 + 1 +1 +1

询问 最小的操作次数 使得最后所有树木的水分 = 0 =0 =0

思路:

第一种操作对应差分的 :
d [ 1 ] − 1 , d [ i + 1 ] + 1 d[1]-1,d[i+1]+1 d[1]1,d[i+1]+1

第二种操作对应 :
d [ i ] − 1 , d [ n + 1 ] + 1 d[i]-1,d[n+1]+1 d[i]1,d[n+1]+1

第三种操作对应
d [ 1 ] + 1 , d [ n + 1 ] − 1 d[1]+1,d[n+1]-1 d[1]+1,d[n+1]1

code :

ll n,a[N],d[N];
void solve(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		d[i] = a[i] - a[i-1];
	}
	
	
	ll res = 0 ;
	
	for(int i=n;i>=2; i -- ){
	
		if(d[i] >= 0 ) res += d[i];
		else{
			res -= d[i];
			d[1] += d[i];
		}
	}
	
	
	cout<<res + abs(d[1])<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值