首页 技术 正文
技术 2022年11月19日
0 收藏 607 点赞 3,847 浏览 1076 个字

士兵杀敌(二)

时间限制:1000 ms  |  内存限制:65535 KB难度:5 

描述

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

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

南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。

 

输入
只有一组测试数据
第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1<M<100000)
随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=100)
随后的M行每行是一条指令,这条指令包含了一个字符串和两个整数,首先是一个字符串,如果是字符串QUERY则表示南将军进行了查询操作,后面的两个整数m,n,表示查询的起始与终止士兵编号;如果是字符串ADD则后面跟的两个整数I,A(1<=I<=N,1<=A<=100),表示第I个士兵新增杀敌数为A.
输出
对于每次查询,输出一个整数R表示第m号士兵到第n号士兵的总杀敌数,每组输出占一行
样例输入
5 6
1 2 3 4 5
QUERY 1 3
ADD 1 2
QUERY 1 3
ADD 2 3
QUERY 1 2
QUERY 1 5
样例输出
6
8
8
20直接贴代码:
如无法理解,移步 士兵杀敌(一)
 #include"stdio.h"
#include<string.h>
int a[];
int main()
{
int n,sum;
scanf("%d%d",&n,&sum);
int i,j,k;
memset(a,,sizeof(a));
for(i=;i<=n;i++)
{
int num;
scanf("%d",&num);
j=i;
while(j<=n)
{
a[j]=a[j]+num;
j+=j&(-j);
}
}
//for(i=1;i<=n;i++)
//printf("%d ",a[i]);
//printf("\n");
char ask[];
for(i=;i<sum;i++)
{
scanf("%s",ask);
if(ask[]=='Q')
{
scanf("%d%d",&k,&j);
int s1=,s2=;
k=k-;
while(k>=)
{
s1=s1+a[k];
k-=k&(-k);
}
while(j>=)
{
s2=s2+a[j];
j-=j&(-j);
}
printf("%d",s2-s1);
putchar('\n');
}
if(ask[]=='A')
{
int so,num;
scanf("%d%d",&so,&num);
while(so<=n)
{
a[so]+=num;
so+=so&(-so);
}
}
}
}


相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,078
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,553
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,402
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,177
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,814
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898