给定一个长度为 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行,每行一个整数,表示询问的答案。
5
1 2 3 4 5
3
1 2 4
2 2 3
2 3 5
9
8
26
n, q<=100000,数列中的每个数不超过1000
#include<bits/stdc++.h>
using namespace std;
int lst[100005];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
lst[i]=lst[i-1]+x;
}
int m;
cin>>m;
for(int i=0;i<m;i++){
int op,l,r;
cin>>op>>l>>r;
if(op==1){
cout<<lst[r-1]-lst[l-2]<<endl;
}
else{
int q=0;
for(int i=0;i<r-l+1;i++){
q+=i+1;
}
cout<<lst[r-1]-lst[l-2]+q<<endl;
}
}
}
全wa~
求大神帮忙