关于站外一道题
  • 板块学术版
  • 楼主YJDAK
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/12/22 18:55
  • 上次更新2023/12/22 21:13:54
查看原帖
关于站外一道题
923645
YJDAK楼主2023/12/22 18:55

问题描述

给定一个长度为n的数列a以及q次询问。

询问共有两种:

询问1:给定x和y,询问第x个数至第y个数的和

询问2:给定x和y,询问第x个数至第y个数的加权和。其中,区间内的第1个数的权重为1,第2个数的权重为2,以此类推。

输入格式

第一行包含一个正整数n,表示数列长度。

第二行共有n个非负整数,表示数列a。

第三行包含一个正整数q,表示询问数量。

随后q行,每行三个正整数k、x、y,用来描述询问。k表示询问的类型,x、y表示询问的区间。 输出格式

共q行,每行一个整数,表示询问的答案。

代码如下:

#include<iostream>
using namespace std;
int a[100005];
int sum[100005];
int num[100005];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];
		
	}
	for(int i=1;i<=n;i++)
	{
		num[i]=num[i-1]+sum[i];
	}
	int q,k;
	cin>>q;
	while(q--)
	{
		int l,r;
		cin>>k>>l>>r;
		if(k==1)
		{
			cout<<sum[r]-sum[l-1]<<endl;
		 } 
		else if(k==2&&l>=2)
		 {
		 	cout<<(r-l+1)*sum[r]-(num[r-1]-num[l-2])<<endl;
		 }
		
	}
	return 0;
} 

为啥这么写只有60分!!!

2023/12/22 18:55
加载中...