士兵杀敌(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。

小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。

注意,南将军可能会问很多次问题。

输入
只有一组测试数据
第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示南将军询问的次数(1<M<100000)
随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=100)
随后的M行每行有两个整数m,n,表示南将军想知道第m号到第n号士兵的总杀敌数(1<=m,n<=N)。
输出
对于每一个询问,输出总杀敌数
每个输出占一行
样例输入
5 2
1 2 3 4 5
1 3
2 4
样例输出
6
9
来源
[张云聪]原创
上传者
张云聪

这道题可以用线段树来做,也可以不用,用前缀和来计算也行;

线段树做法:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
int n,m;
struct node
{int l,r,Max,Min,sum;
}Tree[maxn*3];
void PushUp(int o)//构造线段树;
{Tree[o].sum=Tree[o*2].sum+Tree[o*2+1].sum;
}
void Build(int o,int l,int r)
{if(l==r){int t;scanf("%d",&t);Tree[o].Max=Tree[o].Min=Tree[o].sum=t;return ;}int mid=(l+r)/2;Build(o*2,l,mid);Build(o*2+1,mid+1,r);PushUp(o);
}
int QuerySum(int o,int l,int r,int x,int y)
{if(x==l&&y==r){return Tree[o].sum;}int mid=(l+r)/2;if(x>mid){return QuerySum(o*2+1,mid+1,r,x,y);}else if(mid>=y){return QuerySum(o*2,l,mid,x,y);}else{return QuerySum(o*2,l,mid,x,mid)+QuerySum(o*2+1,mid+1,r,mid+1,y);}
}
int main()
{while(scanf("%d %d",&n,&m)!=EOF){Build(1,1,n);for(int i=1;i<=m;i++){int x,y;scanf("%d %d",&x,&y);printf("%d\n",QuerySum(1,1,n,x,y));}}
return 0;
}

前缀和做法:

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
int a[maxn],sum[maxn];
int n,m;
int main()
{   while(scanf("%d %d",&n,&m)!=EOF){long long int ans=0;for(int i=1;i<=n;i++){scanf("%d",&a[i]);ans=ans+a[i];sum[i]=ans;}for(int i=0;i<m;i++){int x,y;scanf("%d %d",&x,&y);printf("%d\n",sum[y]-sum[x-1]);}}
return 0;
}

NYOJ-108-士兵杀敌(一)相关推荐

  1. NYOJ 108 士兵杀敌(一)

    士兵杀敌(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在想知 ...

  2. NYOJ 108士兵杀敌(一)

    #include<stdio.h> #include<string.h> int c[1000001]; int main() {  int n,m,i,a,b;  scanf ...

  3. NYOJ 228 士兵杀敌(五)

    士兵杀敌(五) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  4. NYOJ 123 士兵杀敌(四)

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  5. NYOJ 119 士兵杀敌(三)

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...

  6. NYOJ 116 士兵杀敌(二)

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...

  7. NYOJ【士兵杀敌(二)】

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...

  8. NYOJ -123 士兵杀敌(四)

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  9. NYOJ 116士兵杀敌(二) 树状数组

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116 士兵杀敌(一) 数组是固定的,所以可以用一个sum数组来保存每个元素的和就行,但是不 ...

  10. NYOJ 士兵杀敌(二) 树状数组

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...

最新文章

  1. 英特尔王锐:软硬件并驾齐驱,开发者是真英雄
  2. Java中的多线程你只要看这一篇就够了
  3. [转][Java]尝试解决Java多行字符串的编辑问题
  4. Inkscape导出xaml
  5. ApacheCN JavaScript 译文集(二) 20211123 更新
  6. php auth和rbac区别,THINKPHP中的AUTH权限管理介绍
  7. php url地址栏传中文乱码解决方法集合
  8. 超市管理系统连接服务器失败,超市管理系统应用解决超市管理难题
  9. 蓝牙 - 注册SIG账号
  10. 003_Kubernetes核心技术
  11. python3两个三阶矩阵相乘_矩阵相乘的实现-python
  12. PdgCntEditor一键生成PDF书签目录
  13. 信息系统项目管理师(2022年) —— 第 3 章 项目立项管理
  14. 关闭Win10锁屏的防暴力破解功能
  15. 合同和协议的区别_合同的内容包括哪些,合同和协议的区别
  16. 加州大学圣地亚哥计算机硕士申请,美国加州大学圣地亚哥分校计算机工程硕士.pdf...
  17. php 多个curl 很慢,PHP下CURL异常慢
  18. 面向对象:对象的概念
  19. [Python]图像处理——区域生长
  20. 废除金本位:银行家赋予罗斯福的历史使命

热门文章

  1. 网站漏洞修复公司 对网站上传文件漏洞的修复与安全加固
  2. 人脸识别可视化项目实现过程Bug记录
  3. freebase api的使用
  4. 《增长黑客》:针对产品增长---思维导图
  5. 如何遮挡电影英汉字幕
  6. Cassandra在海量数据存储及大型项目案例介绍-part1
  7. 获取银行卡Log接口
  8. 从MSDN我告诉你下载镜像
  9. 崩溃日志保存本地log,服务器上传
  10. 第四届蓝桥杯省赛C++A组 剪格子