列表

详情


NC205077. 夹娃娃

描述

犇犇是一只贪玩的牛。他最喜欢的游戏是夹娃娃。已知有 n 个娃娃排成一排,犇犇可以控制夹子的位置和夹子的宽度。每个娃娃的价值为整数 w[i],犇犇想知道,他夹起的l 到r 个娃娃的总价值是多少

输入描述

第 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]);
	}
}

上一题