2026/5/24 9:27:45
网站建设
项目流程
公司的帐如何做网站,做网站用什么语言制作最安全?,怎么免费申请网站域名,空间数据云网站B3612 【深进1.例1】求区间和
题目来源#xff1a;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]#xff0c;分别求这 mmm 个区间的区…B3612 【深进1.例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;// 1. 导入扫描器类用于读取控制台输入publicclassMain{// 2. 定义主类Java程序入口类名需和文件名一致publicstaticvoidmain(String[]args){// 3. 主方法程序执行的入口ScannerscnewScanner(System.in);// 4. 创建Scanner对象关联控制台输入流intnsc.nextInt();// 5. 读取第一个整数n表示原数组的元素个数// 6. 定义原数组a和前缀和数组s长度n1索引0闲置1~n存数据和C1-based索引一致int[]anewint[n1];int[]snewint[n1];// 7. 循环读取n个元素构建原数组a 前缀和数组s核心预处理for(inti1;in;i){a[i]sc.nextInt();// 8. 读取第i个整数存入原数组a的第i位s[i]s[i-1]a[i];// 9. 前缀和核心公式s[i] 前i个元素的累加和}intmsc.nextInt();// 10. 读取整数m表示后续的区间和查询次数// 11. 循环处理m次查询每次O(1)时间出结果for(inti1;im;i){intlsc.nextInt();// 12. 读取查询的左边界lintrsc.nextInt();// 13. 读取查询的右边界r// 14. 区间和核心计算[l,r]的和 前r项和 - 前l-1项和直接打印结果System.out.println(s[r]-s[l-1]);}sc.close();// 15. 关闭Scanner释放输入流资源}}这个是关于前缀和的问题先设置好前缀和的数组然后通过for循环来得到每一个前缀和得到一个前缀和数组。然后读取输入的l和r,通过循环可以获得多组l和r的相减的结果。然后输出就可以了。要注意到边界条件l不能小于1