1 条题解

  • 0
    @ 2026-1-30 20:04:02
    #include<bits/stdc++.h>
    using namespace std;
    // [1] 全局变量定义:n为数列长度,m为查询次数
    int n,m;
    // [2] arr数组:存储原始数列(1基索引,大小适配1e5数据范围)
    int arr[100100]; 
    // [3] srr数组:存储前缀和(1基索引,初始化为0,大小适配1e5数据范围)
    int srr[100100]={};
    
    int main() {
        // [4] 输入数列长度n和查询次数m
        cin>>n>>m;
        // [5] 循环读取n个数列元素,存入arr数组(1基索引,从第1位开始存储)
        for(int i=1;i<=n;i++){
        	cin>>arr[i];
        }
        // [6] 初始化前缀和数组的第1项:前1项和等于第1个元素的值
        srr[1]=arr[1];
        // [7] 构建完整前缀和数组:srr[i] 表示前i项元素的和
        for(int i=2;i<=n;i++){
    	    srr[i]=srr[i-1]+arr[i];
        }
        // [8] 处理m次区间和查询
        for(int i=1;i<=m;i++){
    	    int l,r;
    	    // [9] 输入当前查询的区间左端点l、右端点r(1≤l≤r≤n)
    	    cin>>l>>r;
    	    // [10] 前缀和公式计算区间[l,r]的和:前r项和 - 前l-1项和
    	    int sum=srr[r]-srr[l-1];
    	    // [11] 输出当前区间的和
    	    cout<<sum<<endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1369
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者