NC205077. 夹娃娃
描述
输入描述
第 1 行两个正整数 n,k。n 表示娃娃的个数,k 表示询问的次数第 2 行 n 个正整数,表示数组 w,第 i 个数字表示 w[i]接下来的 k 行,每行两个正整数 l,r。表示犇犇抓起来的娃娃的范围。数据范围:
对于20%的数据,保证l=r
对于30%的数据,保证n<=100
对于20%的数据,保证k<=100
对于所有数据:
1<=n<=1e5, 1<=k<=1e6
1<=w[i]<=1e3
1<=l<=r<=n
输出描述
输出 k 行,每行一个数,表示从 l 到 r 的价值和。
示例1
输入:
5 2 2 4 1 3 6 1 3 2 4
输出:
7 8
示例2
输入:
3 3 2 6 4 1 3 2 3 1 2
输出:
12 10 8
C++14(g++5.4) 解法, 执行用时: 276ms, 内存消耗: 7388K, 提交时间: 2020-06-06 13:10:49
#include<stdio.h> int a[100005],s[100005]; int main(){ int n,k;scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]),s[i]=s[i-1]+a[i]; while(k--){ int l,r;scanf("%d%d",&l,&r); printf("%d\n",s[r]-s[l-1]); } }
Python3 解法, 执行用时: 1253ms, 内存消耗: 15944K, 提交时间: 2021-09-10 20:37:11
import sys n,k=map(int,input().split()) c=list(map(int,input().split())) a=[0] for i in range(n): a.append(a[i]+c[i]) for i in range(k): x,y=map(int,sys.stdin.readline().split()) ans=a[y]-a[x-1] print(ans) exit(0)
C 解法, 执行用时: 199ms, 内存消耗: 10416K, 提交时间: 2021-05-25 15:20:55
#include<stdio.h> int sum[100005]; int main() { int i,k,l,n,r; scanf("%d%d",&n,&k);sum[0]=0; for(i=1;i<=n;i++){ scanf("%d",&l);sum[i]=sum[i-1]+l;} while(k--){ scanf("%d%d",&l,&r); printf("%d\n",sum[r]-sum[l-1]); } }
C++(clang++11) 解法, 执行用时: 229ms, 内存消耗: 7364K, 提交时间: 2020-11-03 14:28:16
#include<cstdio> int n,i,a[100001],m,l,r; int main() { scanf("%d%d",&n,&m); for(;i<n;i++) { scanf("%d",&l); a[i+1]=a[i]+l; }for(;m--;) { scanf("%d%d",&l,&r); printf("%d\n",a[r]-a[l-1]); } }