树状数组单点更新和区间查询

这里是最基本的操作。

单操作时间复杂度O(logN),空间复杂度O(N).

 1 #include <fstream>
 2 #include <iostream>
 3 #include <cstdio>
 4
 5 using namespace std;
 6
 7 int n,m;
 8 int a[100002],tree[100002];
 9
10 void build();//建树状数组
11 int read(int pos);//求 sum[1,pos]的答案
12 void update(int pos,int val);//把a[pos]加上v
13
14 int main()
15 {
16     //freopen("D:\\input.in","r",stdin);
17     //freopen("D:\\output.out","w",stdout);
18     int bo,t1,t2;
19     scanf("%d %d",&n,&m);
20     for(int i=1;i<=n;i++)
21         scanf("%d",&a[i]);
22     build();
23     for(int i=1;i<=m;i++)
24     {
25         scanf("%d%d%d",&bo,&t1,&t2);
26         if(bo)
27             update(t1,t2);
28         else
29             printf("%d\n",read(t2)-read(t1-1));
30     }
31     return 0;
32 }
33 void build()
34 {
35     tree[0]=0;
36     for(int i=1;i<=n;i++)
37     {
38         tree[i]=a[i];
39         for(int j=i-1;j>i-(i&(-i));j=j-(j&(-j)))
40         {
41             tree[i]+=tree[j];
42         }
43     }
44 }
45 int read(int pos)
46 {
47     int ans=0;
48     while(pos>0)
49     {
50         ans+=tree[pos];
51         pos-=pos&(-pos);
52     }
53     return ans;
54 }
55 void update(int pos,int val)
56 {
57     while(pos<=n)
58     {
59         tree[pos]+=val;
60         pos+=pos&(-pos);
61     }
62 }

时间: 2024-10-08 16:42:11

树状数组单点更新和区间查询的相关文章

TOJ 2725 See you~(二维树状数组单点更新区间查询)

描述 Now I am leaving hust acm. In the past two and half years, I learned so many knowledge about Algorithm and Programming, and I met so many good friends. I want to say sorry to Mr, Yin, I must leave now ~~>.<~~. I am very sorry, we could not advanc

【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵

https://vjudge.net/contest/66989#problem/A 单点修改,区间查询 方法一:线段树 http://www.cnblogs.com/kuangbin/archive/2011/08/15/2139834.html 1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<cmath> 6 #

一维 + 二维树状数组 + 单点更新 + 区间更新 详解

树状数组详解: 假设一维数组为A[i](i=1,2,...n),则与它对应的树状数组C[i](i=1,2,...n)是这样定义的: C1 = A1 C2 = A1 + A2 C3 = A3 C4 = A1 + A2 + A3 + A4 C5 = A5 C6 = A5 + A6 ................. C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 ................ 如图可知: 为奇数的时候他是代表他本身,而为偶数的时候则是代表着自

Libre OJ 130、131、132 (树状数组 单点修改、区间查询 -&gt; 区间修改,单点查询 -&gt; 区间修改,区间查询)

#130. 树状数组 1 :单点修改,区间查询 题目链接:https://loj.ac/problem/130 题目描述 这是一道模板题. 给定数列 a[1], a[2], \dots, a[n]a[1],a[2],…,a[n],你需要依次进行 qq 个操作,操作有两类: 1 i x:给定 i,xi,x,将 a[i]a[i] 加上 xx: 2 l r:给定 l,rl,r,求 \sum_{i=l}^ra[i]∑i=lr?a[i] 的值(换言之,求 a[l]+a[l+1]+\dots+a[r]a[l

Stars(树状数组单点更新)

Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and not to the right of the given star. Astronomers wa

【2018年全国多校算法寒假训练营练习比赛(第五场)-E】情人节的电灯泡(二维树状数组单点更新+区间查询)

试题链接:https://www.nowcoder.com/acm/contest/77/E 题目描述 情人节到了,小芳和小明手牵手,打算过一个完美的情人节,但是小刚偏偏也来了,当了一个明晃晃的电灯泡,小明很尴尬,就和小刚说,我交给你个任务,你完成了我俩就带你玩,否则你就回家吧.小刚很有当单身狗的觉悟,他坚决不想让小明过好情人节,同为单身狗的你能帮帮他吗?现在有一个n×n(1 <= n <= 1000)的格子,每一个格子都有一个电灯泡,可能是亮的,也可能是灭的(1代表亮, 0代表灭),现在有两

POJ 1195-Mobile phones(二维树状数组-区间更新区间查询)

Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 17661   Accepted: 8173 Description Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows. The area is divided into squares. The

树状数组区间更新

在今天的文章开始之前,给大家提一个建议,由于线段树和树状数组这两个结构的分析有很多联系,因此,建议没有看前几篇文章的朋友一定需要了解一下前面的内容.链接如下: 线段树+RMQ问题第二弹 线段树第二弹(区间更新) 树状数组(Binary Indexed Tree,BIT) 上篇文章我们讨论了树状数组的基本结构以及它最擅长的两个功能:单点更新和区间求和,今天,我们来接着上一篇文章的内容继续深入研究.上篇文章我们是将树状数组和线段树进行对比讲解的,既然线段树的章节我们介绍了区间求和.区间最值.单点更新

HRBUST 1161 树状数组区间更新求和

Leyni Time Limit: 3000 MS Memory Limit: 65536 K Total Submit: 267(64 users) Total Accepted: 82(57 users) Rating: Special Judge: No Description Leyni被人掳走,身在水深火热之中... 小奈叶为了拯救Leyni,独自一人前往森林深处从静竹手中夺回昏迷中的Leyni. 历经千辛万苦,小奈叶救出了Leyni,但是静竹为此极为恼怒,决定对他们发起最强烈的进攻.