NYOJ108

// 思路就是:数组第i项存储的是前i个(包括第i个)士兵的杀敌数

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

int num_of_soldiers, num_of_asks, from, to;

int total_kills[100001];

int i, num_of_kills;

memset(total_kills, 0, sizeof(total_kills));

scanf("%d %d", &num_of_soldiers, &num_of_asks);

for (i = 1; i <= num_of_soldiers; i++)

{

scanf("%d", &num_of_kills);

total_kills[i] = total_kills[i - 1] + num_of_kills;

}

while (num_of_asks--)

{

scanf("%d %d", &from, &to);

printf("%d\n", total_kills[to] - total_kills[from - 1]);

}

return EXIT_SUCCESS;

}

时间: 2024-08-27 03:46:40

NYOJ108的相关文章

NYOJ108 士兵杀敌(一)【树状数组】

士兵杀敌(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧. 注意,南将军可能会问很多次问题. 输入 只有一组测试数据 第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示南将军询问的次数(1<M<100000) 随后的一行是N个整数,ai表示第i号士兵杀敌数