NYOJ-108-士兵杀敌(一)
士兵杀敌(一)
- 描述
-
南将军手下有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-士兵杀敌(一)相关推荐
- NYOJ 108 士兵杀敌(一)
士兵杀敌(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在想知 ...
- NYOJ 108士兵杀敌(一)
#include<stdio.h> #include<string.h> int c[1000001]; int main() { int n,m,i,a,b; scanf ...
- NYOJ 228 士兵杀敌(五)
士兵杀敌(五) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- NYOJ 123 士兵杀敌(四)
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- NYOJ 119 士兵杀敌(三)
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...
- NYOJ 116 士兵杀敌(二)
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...
- NYOJ【士兵杀敌(二)】
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...
- NYOJ -123 士兵杀敌(四)
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- NYOJ 116士兵杀敌(二) 树状数组
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116 士兵杀敌(一) 数组是固定的,所以可以用一个sum数组来保存每个元素的和就行,但是不 ...
- NYOJ 士兵杀敌(二) 树状数组
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...
最新文章
- 英特尔王锐:软硬件并驾齐驱,开发者是真英雄
- Java中的多线程你只要看这一篇就够了
- [转][Java]尝试解决Java多行字符串的编辑问题
- Inkscape导出xaml
- ApacheCN JavaScript 译文集(二) 20211123 更新
- php auth和rbac区别,THINKPHP中的AUTH权限管理介绍
- php url地址栏传中文乱码解决方法集合
- 超市管理系统连接服务器失败,超市管理系统应用解决超市管理难题
- 蓝牙 - 注册SIG账号
- 003_Kubernetes核心技术
- python3两个三阶矩阵相乘_矩阵相乘的实现-python
- PdgCntEditor一键生成PDF书签目录
- 信息系统项目管理师(2022年) —— 第 3 章 项目立项管理
- 关闭Win10锁屏的防暴力破解功能
- 合同和协议的区别_合同的内容包括哪些,合同和协议的区别
- 加州大学圣地亚哥计算机硕士申请,美国加州大学圣地亚哥分校计算机工程硕士.pdf...
- php 多个curl 很慢,PHP下CURL异常慢
- 面向对象:对象的概念
- [Python]图像处理——区域生长
- 废除金本位:银行家赋予罗斯福的历史使命