博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树状数组【功能实现】
阅读量:5218 次
发布时间:2019-06-14

本文共 1370 字,大约阅读时间需要 4 分钟。

写之前先膜拜一下最近教我树状数组的大神orzorzorz.. 【啊。。发现讲得很清楚= =...mark】 看了一下有关于树状数组的基础题,大概就是关于树状数组的原理运用以及基本的功能实现。 这里先把树状数组的功能理一下     1.点修改     2.区间和的查询 (论线段树和树状数组的区别....) 简要的说一下,要实现以上功能主要是要了解: 1.lowbit的作用 2.初始化:前缀和(详见代码①) 3.区间和的查询运用的区间的相关运算(什么区间加法,区间减法啥的),详见代码② 废话不说了要睡觉了嗯 扔上题目和代码嗯,原理的话等我某哪天组织好语言再来,以及poj3468
【问题描述】    给定一数列,规定有两种操作,一是修改某个元素,二是求区间的连续和。    输入数据第一行包含两个正整数n,m(n<=100000,m<=500000),以下是m行,    每行有三个正整数k,a,b(k=0或1, a,b<=n).k=0时表示将a处数字加上b,k=1时表示询问区间[a,b]内所有数的和。对于每个询问输出对应的答案。【输入样例】    10 20    0 1 10    1 1 4    0 6 6    1 4 10    1 8 9    1 4 9    0 10 2    1 1 8    0 2 10    1 3 9    0 7 8    0 3 10    0 1 1    1 3 8    1 6 9    0 5 5    1 1 8    0 4 2    1 2 8    0 1 1【输出样例】    10    6    0    6    16    6    24    14    50    41

 

#include
#include
using namespace std; long long a[100001],n,m; int sum(int x){ int ans=0; for(;x;x-=x&-x) ans+=a[x];//lowbit的写法...给某个大神跪跪跪 return ans; } void add(int x,int d){ for(;x<=n;x+=x&-x) a[x]+=d; } int main(){ int i,j=0,s,k,t,x,y,d; freopen("sum.in","r",stdin); freopen("sum.out","w",stdout); scanf("%d%d",&n,&m); memset(a,0,sizeof(a)); for(i=0;i

 

 

由于这一题比较特殊,刚开始的a数组初始化为0,所以初始化不需要考虑打前缀和 这里说一下,如果要求输入a数组值,则需要维护一个b数组//因为这里需要修改单点的值,所以维护最初的数组是不行的 所以,b数组的初始化:      b[i]=b[i-1]+a[i];①//前缀和,方便区间的运算

转载于:https://www.cnblogs.com/polebug/p/3672337.html

你可能感兴趣的文章
rabbit搭建
查看>>
单例线程安全
查看>>
BATJ 必考的 Java 面试题!
查看>>
redis架构
查看>>
泛型的内部原理:类型擦除以及类型擦除带来的问题
查看>>
xshell连接不了虚拟机
查看>>
启动svn php nginx操作方法
查看>>
虚拟机安装centos6以及网络ip配置
查看>>
怎么查看oracle数据库是否已启动
查看>>
linux 安装oracle服务器
查看>>
dbca.rsp解读
查看>>
linux安装weblogic 12
查看>>
linux设置oracle数据库和监听开机自动启动
查看>>
Linux 常 用 命 令
查看>>
linux shell编程
查看>>
linux 部署oracle 11g
查看>>
docker基础命令
查看>>
钉钉开发初探...
查看>>
Fiddler助力微信开发调试
查看>>
大数据之Linux - 文件目录操作常用命令
查看>>