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

问题描述

  给定一个长度为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;
} 

为什么这么写只有五十分!

2023/12/20 18:23
加载中...