首页 > 其他分享 >树状数组学习笔记

树状数组学习笔记

时间:2023-07-24 18:34:14浏览次数:42  
标签:树状 int cin 笔记 add 数组 op

 

树状数组真的很精美,码量小,还很快,比线段树快多了[滑稽]。

一维树状数组

单点修改,区间查询

例题:

loj #130. 树状数组 1

lougu P9974【模板】树状数组 1

不多说,代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 5e5+5;
int n, m, c[N];

int lowbit(int k) {return k&-k;}

void add(int x, int d) {for (; x <= n; x += lowbit(x)) c[x] += d;}

int ask(int x) {
    int sum = 0;
    for (; x; x -= lowbit(x)) sum += c[x];
    return sum;
}

int main() {
    ios::sync_with_stdio(0);
    cin >> n >> m;
    for (int i = 1, x; i <= n; ++i) {
        cin >> x;
        add(i, x);
    }
    for (int op, x, y; m--; ) {
        cin >> op >> x >> y;
        if (op == 1) add(x, y);
        else cout << ask(y)-ask(x-1) << endl;
    }
    return 0;
}

 

区间修改,单点查询

例题:

loj #131. 树状数组 2
luogu P3368【模板】树状数组 2
不多说,代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 5e5+5;
int n, m, a[N], c[N];

int lowbit(int k) {return k&-k;}

void add(int x, int d) {for (; x <= n; x += lowbit(x)) c[x] += d;}

int ask(int x) {
    int sum = 0;
    for (; x; x -= lowbit(x)) sum += c[x];
    return sum;
}

int main() {
    ios::sync_with_stdio(0);
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) cin >> a[i];
    for (int op, x, y, k; m--; ) {
        cin >> op >> x;
        if (op == 1) {
            cin >> y >> k;
            add(x, k);
            add(y+1, -k);
        }
        else cout << a[x]+ask(x) << '\n';
    }
    return 0;
}

标签:树状,int,cin,笔记,add,数组,op
From: https://www.cnblogs.com/123wwm/p/17578017.html

相关文章

  • ChatGPT学习笔记2
    前排提醒,本文内容重点是打卡学习,也就是本人自用的笔记,可能逻辑会不太清晰,如果是有心想要学习的话,可以去看看大佬整理的这笔记目录前言《条件是否满足》《给定步骤来补全》《让模型先梳理再给结论》前言今天来进行昨天所说的实践。于我而言,学习的过程就是了解->动手尝试->发现......
  • codeQL 笔记
    codeQLCodeQL是一种代码分析引擎,通过CodeQL可以根据已知的安全漏洞,在其他源代码中查找相似的安全问题。谓词定义方式类似于函数,和Java有点像的是在定义的时候需要指定是否有返回值,如果有返回值则需要以返回类型开头,如果没有返回值,则使用predicate开头predicatesouthern(Perso......
  • 数组(Array)和链表(List)
    推荐https://cloud.tencent.com/developer/article/2304343引言在Java编程中,数组(Array)和链表(List)是常用的数据结构,用于在内存中存储和组织数据。两者都有各自的特点和适用场景,本文将深入比较数组与链表的区别,并结合代码示例进行详细解释。数组(Array)定义和特点数组是一种固定......
  • 尚硅谷 k8s 学习笔记
    K8S进阶部分       1.Deployment部署           1.1自愈能力           1.2多副本           1.3扩容、缩容           1.4滚动更新           1.5版本回退           1.6工作负载  ......
  • JavaScript数据结构和算法简述——数组
    为什么先讲数组数据结构可以简单的被分为线性结构和非线性结构。线性结构大致包括:数组(连续存储);链表(离散存储);栈(线性结构常见应用,由链表或数组增删和改进功能实现);队列(线性结构常见应用,由链表或数组增删和改进功能实现);非线性结构大致包括:树;图;其中,数组是应用最广泛的数据存储结构。它被......
  • PHP数组缓存:三种方式JSON、序列化和var_export的比较
    使用PHP的站点系统,在面对大数据量的时候不得不引入缓存机制。有一种简单有效的办法是将PHP的对象缓存到文件里。下面我来对这3种缓存方法进行说明和比较。第一种方法:JSONJSON缓存变量的方式主要是使用json_encode和json_decode两个php函数。json_encode可以将变量变成文本格式,这......
  • 128MTT 学习笔记
    标题是我乱起的名字。在做某题时受到了启发,想出了一种之前没听说过的MTT,在某谷上一问发现有人和我想的一样,立马去学了。这种方法,我叫它128MTT,它用到了科技__int128。主要思想就是找一个\(10^{27}\)以上的大NTT模数,全程使用__int128做NTT。然而longlong取模尚能用......
  • VUEX笔记
    VUEX笔记statestate:{ ip:''}gettersconstgetters={ ip:state=>state.ip}mutations同步操作this.$store.commit()mutations:{ SET_IP:(state,ip)=>{ state.ip=ip }}actions异步操作this.$store.dispatch()Action类似于mutati......
  • TED Talk 学习笔记
    Howtospeaksothatpeoplewanttolisten|JulianTreasureAvoid:gossipjudgingnegativitycomplaning:viralmiseryexcuseslying:embroidery,exaggerationdogmatism:bombardsomebodyCornerstones/Foundations:HAIL,togreetoracclaimenthusiasitcal......
  • JavaScript基础-数组(进阶)
    扩展运算符letarr1=[1,2],arr2=[3,4];letarr3=arr1.concat(arr2);letarr4=[...arr1,...arr2]console.log(arr4);用concat 连接然后...展开letarr1=[1,2];letarr2=[...arr1]console.log(arr1,arr2);把arr1的值传给arr2,输出[1,2][1,2]......