区间求和类算法

/*
长胖
描述

wh学长非常喜欢巧克力,有一天,wyx给了他n个巧克力魔盒,每个魔盒里都有无穷个巧克力,每个盒子里的巧克力都有固定的肥胖值(为正表示增加,为负表示减少)。

为了让wh更加肥胖,wyx列出了m个方案:每个方案中都有一个L 、R,wh会从第L个盒子到第R个盒子这连续的R - L + 1 个盒子中,每个盒子里拿出一个巧克力吃掉,并增加相对应的肥胖值。

每个方案最多只能实现一次,当然也可以不实现,那么,wyx可以让wh长胖多少呢?

输入
第一行,一个整数n,表示有n个魔盒 (n <= 100000)

第二行包含n个整数,表示从下标为1到n的盒子的肥胖值(-100000<= wi <= 100000)

第三行包含一个整数m表示方案数 (m <= 100000)

接下来m行,每行两个整数L, R (1 <= L, R <= n)

输出
输出一行,包含一个整数表示最大的肥胖值

输入样例 1

5
1 -2 3 -4 5
2
1 5
1 2
输出样例 1

3
提示

第一个方案从1到5可得到 3的肥胖值,第二个可以得到 -1的肥胖值(wyx当然不会让wh选择这个方案),所以最大可得到3的肥胖值。
*/

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
long long  N=223333;
long long   A[223333]={0},B[223333]={0};

int main(){
	ll n,m,a,b,k=0;
	cin>>n;
		A[0]=0;
	for(int i=1;i<=n;i++){
		cin>>A[i];
		A[i]=A[i-1]+A[i]; //算法核心,存储前面的巧克力之和
	}
	cin>>m;
	ll t=m;
	while(m--){
		cin>>a>>b;
		B[k++]=A[b]-A[a-1];//求出a到b之间巧克力热量值
	}
	ll fat=0;

	for(int j=0;j<t;j++){
		if(B[j]>0) fat=fat+B[j];
	}
	cout<<fat;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小猪今天有学习吗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值