acwing-前缀和序列-暴力写法骗分

文章描述了一个关于正整数序列的问题,要求对序列进行排序后,处理两种类型的询问:一是计算原序列中指定区间的元素和,二是计算排序后序列的区间元素和。给定的暴力解决方案在部分测试用例中超时,需要优化算法以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个长度为 nn 的正整数序列 a1,a2,…,ana1,a2,…,an。

如果将该序列从小到大排序,则可以得到另一个长度为 nn 的正整数序列 b1,b2,…,bnb1,b2,…,bn。

现在,请你回答 mm 个询问,询问共分为以下两种:

1 l r,请你计算并输出 ∑i=lrai∑i=lrai。
2 l r,请你计算并输出 ∑i=lrbi∑i=lrbi。
输入格式
第一行包含整数 nn。

第二行包含 nn 个正整数 a1,a2,…,ana1,a2,…,an。

第三行包含整数 mm。

接下来 mm 行,每行包含一个询问,格式如题面描述。

输出格式
共 mm 行,每个询问输出一行答案。

数据范围
前 33 个测试点满足 1≤n,m≤101≤n,m≤10。
所有测试点满足 1≤n,m≤1051≤n,m≤105,1≤ai≤1091≤ai≤109,1≤l≤r≤n1≤l≤r≤n。

输入样例1:
6
6 4 2 7 2 7
3
2 3 6
1 3 4
1 1 6
输出样例1:
24
9
28
输入样例2:
4
5 5 2 3
10
1 2 4
2 1 4
1 1 1
2 1 4
2 1 2
1 1 1
1 3 3
1 1 3
1 4 4
1 2 2
输出样例2:
10
15
5
15
5
5
2
12
3
5
输入样例3:
4
2 2 3 6
9
2 2 3
1 1 3
2 2 3
2 2 3
2 2 2
1 1 3
1 1 3
2 1 4
1 1 2
输出样例3:
5
7
5
5
2
7
7
13
4

暴力代码,没过但样例可以过,超时了

#include<iostream>
#include<algorithm>
using namespace std;
int n,m,a[10],c,d,b,p[10]={0},z[10];//非前缀和写法超时了
	int h=0;
void paixu()
{
	for(int i=1;i<=n;i++)
	{
		p[i]=a[i];//复制数组必须用函数,不然会数很大;
	}
	
}
int main()
{
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	paixu();
	sort(a+1,a+n+1);
	scanf("%d",&m);
	while(m--)
	{h=0;
		scanf("%d %d %d",&b,&c,&d);
		if(b==2)
		{
			
			int j=c;
			for(j=c;j<=d;j++)
			{
				h+=a[j];
			}
			printf("%d\n",h);
		}
		if(b==1)
		{
			for(int i=c;i<=d;i++)
			{
				h+=p[i];
			}
			printf("%d\n",h);
		}
	}
	
}

ACWing795是关于前缀和的问题。前缀和是一种能够在O(n)的预处理,O(1)的查询每段区间的和的一个算法。在原数组a, a, a, a, a[5], …, a[n]中,前缀和Si表示数组的前i项和,即Si = a + a + a + … + a[i]。 ACWing795的前缀和可以通过计算数组的前缀和数组来实现。前缀和数组S[i]表示原数组a的前i项和。可以使用一个循环来计算前缀和数组,从2开始遍历,每次将当前项的值加上前一项的前缀和值即可。最后,通过查询前缀和数组来获取ACWing795的前缀和结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [acwing和leetcode-Algorithm:acwinglabuladongleetcode](https://download.youkuaiyun.com/download/weixin_38635794/20051122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Acwing---795.前缀和](https://blog.youkuaiyun.com/qq_51251599/article/details/128570728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值