问题描述
给定一个长度为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;
}
为什么这么写只有五十分!