蓝桥备赛——前缀和查分

前缀和 

第一题:区间求和:

问题描述

  给定一个长度为n的数列a。
  随后,有q次讯问。每次讯问中,给定一个起始位置x和终止位置y,希望你求出从第x个数到第y个数的和。

输入格式

  第一行包含一个整数n,表示数列的长度。
  第二行包含n个不超过1000的非负整数,表示数列a。
  第三行包含一个整数q,表示询问个数
  随后q行,每行两个正整数x、y表示求和的起始和终止位置。

输出格式

  q行,每行一个整数,对应每次求和的答案

样例输入

5
3 5 2 4 1
2
1 3
2 5

样例输出

10
12

样例说明

  共有2次求和操作。
  第一次求和的结果为3+5+2=10
  第二次求和的结果胃5+2+4+1=12

数据规模和约定

  n、q<=2000

 



import java.util.Scanner;



public class 区间求和001 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
       Scanner sc =new Scanner(System.in);
        int n = sc.nextInt();
        int num [] = new int[n+1];   //定义原数组  注意从1开始  n+1
        int sum []= new int[n+1];     //定义前缀和数组 注意从1开始  n+1
        for(int i = 1; i <=n ; i++) {
        	num[i]=sc.nextInt();       //输入原数组数据
        	sum[i]=sum[i-1]+num[i];    //求前缀和
        }
        int q = sc.nextInt();   //输入q次询问
        for(int  j= 0;j<q;j++) {     
        	int l = sc.nextInt(),r =sc.nextInt();  //输入左边界和右边界 
        	System.out.println(sum[r]-sum[l-1]);
        }
	}

}

差分数组原理

比如我们现在有一个数组d,d={0,2,5,4,9,7,10,0}

index 0 1 2 3 4 5 6 7
d[i] 0 2 5 4 9 7 10 0

那么差分数组是什么呢?

其实差分数组本质上也是一个数组,我们暂且定义差分数组为d,差分数组f的大小和原来d数组大小一样,而且f[i]=d[i]-d[i-1] (i≠0)</

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值