核心内容摘要
Clojure-lsp完全指南:从安装到精通的10个核心步骤
B3612 【深进
例1】求区间和题目来源https://www.luogu.com.cn/problem/B3612#ide题目描述给定nnn个正整数组成的数列a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an和mmm个区间[li,ri][l_i,r_i][li,ri]分别求这mmm个区间的区间和。
输入格式第一行包含一个正整数nnn表示序列的长度。
第二行包含nnn个正整数a1,a2,⋯ ,ana_1,a_2, \cdots ,a_na1,a2,⋯,an。
第三行包含一个正整数mmm表示区间的数量。
接下来mmm行每行包含两个正整数li,ril_i,r_ili,ri满足1≤li≤ri≤n1\le l_i\le r_i\le n1≤li≤ri≤n。
输出格式共mmm行其中第iii行包含一个正整数表示第iii组答案的询问。
输入输出样例 #1输入 #14 4 3 2 1 2 1 4 2 3输出 #110 5说明/提示样例解释第111到第444个数加起来和为101010。
第222个数到第333个数加起来和为555。
数据范围对于50%50 \%50%的数据n,m≤1000n,m\le 1000n,m≤1000对于100%100 \%100%的数据1≤n,m≤1051 \le n, m\le 10^51≤n,m≤1051≤ai≤1041 \le a_i\le 10^41≤ai≤104。
题解importjava.util.Scanner;//
导入扫描器类用于读取控制台输入publicclassMain{//
定义主类Java程序入口类名需和文件名一致publicstaticvoidmain(String[]args){//
主方法程序执行的入口ScannerscnewScanner(System.in);//
创建Scanner对象关联控制台输入流intnsc.nextInt();//
读取第一个整数n表示原数组的元素个数//
定义原数组a和前缀和数组s长度n1索引0闲置1~n存数据和C1-based索引一致int[]anewint[n1];int[]snewint[n1];//
循环读取n个元素构建原数组a 前缀和数组s核心预处理for(inti1;in;i){a[i]sc.nextInt();//
读取第i个整数存入原数组a的第i位s[i]s[i-1]a[i];//
前缀和核心公式s[i] 前i个元素的累加和}intmsc.nextInt();//
读取整数m表示后续的区间和查询次数//
循环处理m次查询每次O(
时间出结果for(inti1;im;i){intlsc.nextInt();//
读取查询的左边界lintrsc.nextInt();//
读取查询的右边界r//
区间和核心计算[l,r]的和 前r项和 - 前l-1项和直接打印结果System.out.println(s[r]-s[l-1]);}sc.close();//
关闭Scanner释放输入流资源}}这个是关于前缀和的问题先设置好前缀和的数组然后通过for循环来得到每一个前缀和得到一个前缀和数组。
然后读取输入的l和r,通过循环可以获得多组l和r的相减的结果。
然后输出就可以了。
要注意到边界条件l不能小于1