CF1709B - Also Try Minecraft 题解

CF1709BAlso Try Minecraft题解

还是原题:搁这

题目大意:

给定长度为n的序列,a[i]代表第i位置的高度,从某个更高的位置走到更矮的位置会获得两者差值的下降伤害。m次询问,询问从s走到t的下降伤害。(s可能大于t

大致思路

前缀和:sum[i]维护从1走到i的伤害. sum1[i]维护从ni的值。s<t就是往前走,用sum[t]-sum[s],否则为sum1[t]-sum1[s]

贴个AC CODE:

int n,m;
long long a[N],sum1[N],sum[N];
void solve() {
	// 竞赛程序
	cin >> n >> m;
	for(int i = 1; i <= n; ++i) {
		cin >> a[i];
		if(i > 1) sum1[i] = sum1[i - 1] + max((long long)0, a[i - 1] - a[i]);
	}
	for(int i = n - 1; i >= 1; --i)
		sum[i] = sum[i+1] + max((long long)0, a[i + 1] - a[i]);
	while(m--) {
		int s, t;
		cin >> s >> t;
		if(s == t)
			cout << "0";
		else if(s > t)
			cout << sum[t] - sum[s] << endl;
		else
			cout << sum1[t] - sum1[s] << endl;
	}
}

偷偷贴个聊天贴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Digital_Enigma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值