nyoj ACM:士兵杀敌(二)(树状数组)

基于simulink的变压器保护仿真设计【MATLAB源码+Word文档】 电力系统变压器保护MATLAB/simulink仿真设计。纵联差动保护-过电流保护-距离保护 阅读详情

士兵杀敌(二)
时间限制: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

平常我们会遇到一些对数组进行维护查询的操作,比较常见的如,修改某点的值、求某个区间的和,而这两种恰恰是树状数组的强项!
一般最先想到的是遍历,但是在数据量很大时,依然会很复杂,此时可以考虑树状数组。
关于树状数组的资料 http://blog.youkuaiyun.com/mosbest/article/details/68923838

树状数组有两种基本用法:
一、插点问线,如“士兵杀敌(二)”
二、插线问点,如“士兵杀敌(四)”

注意:+- 和 & 的优先级不要弄错了,之前一直出问题,后来才发现,竟然是因为这。

//一直出问题,后来才发现,竟然是+- 和 & 的优先级弄错了。 
#include<iostream> 
#include<stdio.h>
#include<string.h>

using namespace std;
int a[1001001];
int c[1001000];
int N,M;

int lowbit(int i)
{
   return -i & i;
}
//计算从1到i的和 
int sum(int i)
{
    int k=0;
    for(;i>0;)
    {
        k+=c[i];
        int m=i&(-i);
        i=i-m;  
    }
    return k;
}

//更改a[]的元素时 
void ADD(int i,int num)
{
    //a[i]+=num; a[]处理 用于建立c[],外其他的更改,查找都与a[]无关了 

    while(i<=N)
    {
        c[i]+=num;
        i=i+(i&(-i));

    }
}

int main()
{

    scanf("%d%d",&N,&M);
    for(int i=1;i<=N;i++)
    {
        scanf("%d",a+i);

    }
    a[0]=0;
    /*建立数状数组c[]方法一
    int x;
    for(int i=1;i<=N;i++){
        scanf("%d",&x);
        ADD(i,x);
    }*/
    //建立数状数组c[]方法二

    for(int i=1;i<=N;i++)
    {
        int m=i&(-i);
        c[i]=0;
        for(int j=0;j<m;j++)
            c[i]+=a[i-j];
    }
    //提问或者更改数据 
    int m,n;
    char s[10];
    for(int i=0;i<M;i++)
    {
        scanf("%s %d %d",s,&m,&n);
        if(strcmp(s, "QUERY") == 0)
        {
            printf("%d\n",sum(n)-sum(m-1));
        }
        else
        {
            ADD(m,n);

        }
    }

    return 0;
}
042_小驰私房菜_MTK Camera yuv旋转90度方案 做旋转可以在app层接收到数据后,自行做旋转,也可以在hal层,针对yuv format这路流进行旋转。那我们做旋转也可以采用类似的方式。预览和录像是正常的,这个是因为预览和录像有方向相关属性可以调整,系统会根据摄像头mount的角度已经当前设备的方向,进行对应的旋转。这个下面这个文件,可以修改摄像头的mount角度。,可以看到前摄的Orientation是270,所以原始出图是做了90度的旋转。这个方案,思路就是在配流信息中,将rotation信息进行修改。注:本文章所用权归:小驰成长圈,禁止转载宣传! 阅读详情

相关推荐

ArcGIS属性表汉字转拼音

接着我安装了一个编辑器“PyCharm Community Edition 2019.3.3\bin\pycharm64.exe”,在里面添加“pypinyin”包,然后将其设置为arcgis的编辑器和调试程序,还是失败;我在10.6的机器上折腾了上面几步,直到两周后脚本突然运行成功,我也不确定是哪一步导致pypinyin包配置成功,因此将心得体会写出来,如果过一段时间,打开10.2的机器运行脚本成功了,再写后续.......,按照“配置方法1:”进行尝试,显示配置失败。

2301_77413856的博客 1295

南阳acm士兵杀敌系列

士兵杀敌(一) #include int main() { int M,N; scanf("%d%d",&N,&M); int *a; a=new int[1000000]; int i,j;int start,end,sum; for(i=0;i {scanf("%d",&a[i]);} for(i=0;i { sum=0; scanf("%d%d",&start,

GUOYUNTING的博客 504

TI MSPM0G3507 循迹小车强制寻黑线代码一

一个基于MSPM0微控制器的循迹小车控制系统。系统通过8路循迹传感器检测黑线位置偏差,使用PID算法计算电机控制量。主程序初始化中断、PWM等外设,在按键触发后进入循迹模式。传感器数据处理函数根据检测到的黑线位置返回偏差值(-7到7),PID控制器根据偏差调整左右电机速度。系统还包含限幅处理、中断服务等模块,实现稳定的自动循迹功能。代码结构清晰,展示了嵌入式系统中传感器数据处理、电机控制和PID算法的典型实现方式。

雾削木的优快云博客 1855

nyoj--116 士兵杀敌(二)(树状数组)

nyoj 116题解练练树状数组。#include <iostream> #include <cstdio> #include <string> #include <algorithm> using namespace std;const int maxn = 1000000 + 10; int a[maxn], c[maxn]; int n, m;int lowbit(int x) { r

许少y 491

Ubuntu 18.04下Freesurfer 7.2.0安装全攻略:从下载到环境配置一步到位

本文详细介绍了在Ubuntu 18.04系统上安装Freesurfer 7.2.0的完整流程,包括系统准备、依赖安装、下载解压、环境配置、许可证获取及性能优化。Freesurfer作为神经影像分析的重要工具,支持皮层重建和体积分割等复杂任务,适用于阿尔茨海默症等神经系统疾病研究。指南还提供了常见问题解决方案和实际应用案例,帮助用户快速搭建高效的神经影像分析平台。

omega的博客 996

工业界实战:小红书推荐系统中的AB测试策略解析——分层、Holdout与反转实验

本文深入解析了小红书推荐系统在工业界实践中采用的AB测试核心策略。重点阐述了分层实验如何解决多实验并行与干扰问题,Holdout机制如何作为评估黄金标准提供稳定基准,以及反转实验如何作为全量上线后的终极安全网进行风险控制。这些策略共同构成了科学、严谨的线上评估体系,是保障推荐系统迭代效果与决策质量的关键。

transformer2023的博客 477

nyoj123 士兵杀敌(四)树状数组 插线问点

士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的 人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的 事情,军师小工的任务就是在南将军询问...

weixin_34128501的博客 147

AD9826的时序分析及Verliog代码

AD9826的时序分析及Verliog代码 (本文对AD9826的模式和时序进行了分析,如有错误敬请指正,关于这款ADC芯片的基本参数,本文不做过多介绍) 1、AD9826的模式 AD9826的采样模式主要有两种,一种是“CDS模式”,一种是“SHA模式”;在这两种模式下分别有1通道、2通道、3通道的采样模式 (1)CDS模式 简单的来说CDS模式就是,有两个采样时钟,一个是ADCCLK1,用来采样CCD波形的参考电平,一个是ADCCLK2用来采样数据电平,然后经过,偏移量调节,再经过PGA增益放大最

m0_50102488的博客 6477

OJ解码编码题

OJ解码题 题目 设有一个整型数组a中存放n个互不相同的整数,a中元素取值范围为0到n-1。a数组的编码定义如下:a[0]的编码为0,放入b[0];ai的编码为在a[0]、a[1]、…、a[i-1]中比a[i]的值小的数的个数,放入b[i]。例如:a[6]={4,3,0,5,1,2}时,则b[6]={0,0,0,3,1,2}。你有两个任务,任务一是编码,即已知n与数组a,求数组b;任务二是解码,即...

weixin_43999803的博客 1072

R语言 地理加权随机森林(GWRFC )

随机森林可以产生高准确度的分类器,被广泛用于解决模式识别问题。然而,随机森林赋予每个决策树相同的权重,这在一定程度上降低了整个分类器的性能。该算法引入二次训练过程,提高分类正确率高目前,鲜有中文文章介绍GWRFC的技术文档,作者想使用该方法时会遇到重重困难,因此有必要利用R来建模,通过流程演示,供读者参阅。............

qingchen98的博客 6632

Pareto 优化 (Pareto Optimization) 算法详解及案例分析

Pareto 最优解是指在多目标优化问题中,无法通过改进一个目标而不损害其他目标的解。具体来说,对于一个解x∗x^*x∗,如果不存在另一个解xxx使得所有目标函数fixf_i(x)fi​x都不劣于fix∗f_i(x^*)fi​x∗,且至少有一个目标函数fjxf_j(x)fj​x优于fjx∗f_j(x^*)fj​x∗,则x∗x^*x∗是 Pareto 最优解。

闲人编程的博客 2761

南阳理工acm 题目116 士兵杀敌(二)树状数组

士兵杀敌(二):用树状数组做的,果然很省时间,虽然还不知道为什么省时间,对算法的时间复杂度什么的也不太明白,不过先会用了一点,至于为什么以后再研究吧! # include # define lowbit(x) x&(-x) int a[1000001],b; void add(int i, int x) { while (i<=b) { a[i]+=x; i+=lo

流影 951

10、基于单倍型多样性隐马尔可夫模型的基因型错误检测

本文提出了一种基于单倍型多样性隐马尔可夫模型(HMM)的基因型错误检测方法,旨在提升三人组基因型数据中错误识别的准确性。通过利用群体水平的连锁信息,该方法克服了传统方法在小系谱数据中表现不佳的局限性。文章详细介绍了模型结构、三种替代似然函数及其计算方法,并通过模拟数据集和真实数据集验证了方法的有效性。实验结果显示,该方法在灵敏度、特异度和准确率方面均表现出色,为基因数据质量控制提供了新的解决方案。

moon9的博客 96

NYOJ题目116 士兵杀敌(二)

士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。 小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。 南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。

Hanks软件库 1488

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116 士兵杀敌(一) 数组是固定的,所以可以用一个sum数组来保存每个元素的和就行,但是不能每次都加,因为那样会超时,查询次数太多。但是这个士兵杀敌(二)就不能用那个方法来解了,因为这个是动态的,中间元素的值可能会变化,所以引出一个新的东西来。刚开始想了一下,实在是没有想到方法...

dizhuo0219的博客 181

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

nyoj ACM:士兵杀敌(四)(树状数组)

士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询问他某个

丁磊_ml的博客 676

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NYOJ 116 士兵杀敌(二)(树状数组模板)

士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。 小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。 南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。

最初的梦想 373

NYOJ228士兵杀敌(五)

题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=228 题意很简单,就不说了。这个题目如果用线段树和树状数组都不好过,甚至过不了,因为不是在线问的,所以用在这里很浪费。这个题目可以用数组直接来做。 解题思路:首先数组初始化为0,如果第i到第j个人平均杀敌k,那么就让数组shu[i]加k,而shu[j+1]减k。更新输入结束后,用以个变量v

nyist_jiang 964

NYOJ 322 Sort 和 NYOJ 116 士兵杀敌(二) 【树状数组】

原题链接:点击打开链接  322;           点击打开链接  116; 不知道什么是树状数组的  就先看看树状数组吧。。链接:点击打开链接; 看完之后  士兵杀敌(二)  应该就可以ac了。。 116  ac代码: #include int ok[1000001],end[1000001]={0}; int f(int a) { return a&(-a); }

nyist_飘谊 886

nyoj ACM:士兵杀敌(五)(数组的巧妙运用)

士兵杀敌(五) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情。在这样的情况下,南将军却经常会在许多

丁磊_ml的博客 655

NYOJ 228 士兵杀敌 五

好神奇的一道题目,原本以为要用树状数组做,做了发现,超时,看了看大牛的代码,直接用数组来处理,真是膜拜了。 本题,数据量很大啊,N  和  C  都要1000000,但是离线后就是O(n)  的复杂度了,

wangjieyunxia的专栏 728

NYOJ 123 士兵杀敌 四

区间插线  求点,倒着用树状数组,想明白了,代码很简单,直接套模板。  http://acm.nyist.net/JudgeOnline/problem.php?pid=123 #include #include #include #include #include #include #include using namespace std; int T,M; int c[1000010]

wangjieyunxia的专栏 751

nyoj 123 士兵杀敌(四)【树状数组】+【插线问点】

树状数组有两种情况:插点问线和插线问点。这道题是插线问点。 因为树状数组最简单的作用是计算1~x的和,所以给出(a, b, c),表示(a,b)区间增加c, 那我们只需要在a点原来的基础上增加c,然后在b点原来的基础上更新-c,这样我们算最终结果的时候在(a, b)之间的就是增加了c,在区间之外的就是没有增加。 代码: #include #include #define M 100000

shengweisong 1020

NYOJ108士兵杀敌(一)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=108 一开始竟然用的vector保存的第i项到第j项的和,果断爆掉了内存呢,我真的是醉了。。 用一个数组保存前K项的和,例如 b[k] = a[1] + ... + a[k] 的和,然后就不说了,都是泪。。 代码: #include #include

奋斗的Die Young 653

树状数组专题

树状数组构造出的基础结构:树状数组的基础是一个被构造出来的式子: C[i]=A[i]+A[i-1]+….+A[i-2^k+1]        k代表i的二进制的最后连续0的个数 如图:设节点编号为x,那么这个节点管辖的区间为2^k个元素。 C1 = A1 C2 = A1 + A2 C3 = A3 C4 = A1 + A2 + A3 + A4 C5 = A5 C6 = A5

acm_hmj的博客 654

士兵杀敌(二)

描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。 小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。 南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。 输入只有一组测试数据 第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条...

weixin_30703911的博客 200
上一篇: 搞懂树状数组
下一篇: nyoj ACM:士兵杀敌(三)(区间最值查询 --RMQ算法)
丁磊_Ml
博客等级 码龄11年 95粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值