当前位置: 首页 > news >正文

做企业网站需要准备什么材料手机网站成功案例

做企业网站需要准备什么材料,手机网站成功案例,保定网站建设推广公司怎么样,百度竞价点击软件树状数组 树状数组,正如起名是一个逻辑上为树结构的数组,其结构如下图所示 可见其二进制位从低位到高位,0的个数决定该结点在第几层,例如结点1(00001),从低位到高位有0个0,所以在第0层,结点4(0…

树状数组

树状数组,正如起名是一个逻辑上为树结构的数组,其结构如下图所示

在这里插入图片描述

可见其二进制位从低位到高位,0的个数决定该结点在第几层,例如结点1(00001),从低位到高位有0个0,所以在第0层,结点4(00100),从低位到高位有2个0,所以在第2层

通过观察,还能看到,一个结点的父结点是该结点加上lowbit(x)

树状数组t[i] 存储的是(x - lowbit(x), x]的值(左开右闭)

其中lowbit(x) 表示的是能够返回一个二进制序列从最后一位1的结果

如果x为10100,取反后结果是01011,再加一则变为了01100,再与10100做与运算后变为00100

在这里插入图片描述

了解了树状数组的结构,那么树状数组有什么应用

  • 单点修改
  • 区间查询

这两个是树状数组最基本的应用

单点修改的操作是在单点修改的同时,迭代更新父节点

/**
* 在x个数加上k
*/
int add(int x,int k)
{for(int i=x;i<=n;i+=lowbit(i))t[i]+=k;
}

区间查询就是迭代加上t[i],每次i -= lowbit(i)

/**
* 查询从第1-x个数的和
*/
int query(int x) {int res = 0;for(int i = x; i > 0; i -= lowbit(i)) {res += tree[i];}return res;
} 
【例题】

给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和。

输入格式

第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。

第二行包含 n 个整数,表示完整数列。

接下来 m 行,每行包含三个整数 k,a,b (k=0,表示求子数列[a,b]的和;k=1,表示第 a 个数加 b)。

数列从 1 开始计数。

输出格式

输出若干行数字,表示 k=0 时,对应的子数列 [a,b] 的连续和。

数据范围

1≤n≤100000,
1≤m≤100000,
1≤a≤b≤n,
数据保证在任何时候,数列中所有元素之和均在 int 范围内。

输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
1 1 5
0 1 3
0 4 8
1 7 5
0 4 8
输出样例:
11
30
35
import java.io.*;
import java.util.*;
public class Main {static final int N = 100010;//原数组static int[] a = new int[N];//树状数组static int[] tree = new int[N];//实际树状数组长度static int n;public static void main(String[] args) throws Exception {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] row1 = br.readLine().split(" ");n = Integer.parseInt(row1[0]);int m = Integer.parseInt(row1[1]);//读取原数组,从下标1开始 String data[] = br.readLine().split(" ");for(int i = 1; i <= n; i++) {a[i] = Integer.parseInt(data[i - 1]);}for(int i = 1; i <= n; i++) {add(i, a[i]);}while(m-- > 0) {String[] op = br.readLine().split(" ");int o = Integer.parseInt(op[0]);int x = Integer.parseInt(op[1]);int y = Integer.parseInt(op[2]);if(o == 1) {add(x, y);} else if(o == 0) {int res = query(y) - query(x - 1);System.out.println(res);}}br.close();}static int lowbit(int x) {return x & (~x + 1);}static void add(int x, int v) {for(int i = x; i <= n; i += lowbit(i)) {tree[i] += v;}}static int query(int a) {int res = 0;for(int i = a; i > 0; i -= lowbit(i)) {res += tree[i];}return res;} 
}
操作时间复杂度
addO(logn)
queryO(logn)

与前缀和算法的比较

前缀和算法无法实现动态求前缀和,如果只需要求一次前缀和之后不再修改,前缀和算法自然比树状数组要好

因为前缀和算法时间复杂度如下

操作时间复杂度
initO(n)
queryO(1)
http://www.dtcms.com/a/574134.html

相关文章:

  • gitLab如何新建分支(根据某个分支)
  • WEEX平台安全验证技术规范与实践
  • C++ opencv简化轮廓
  • 网站服务器租用和托管wordpress 个人国内收款
  • Java中将System.out内容写入Tomcat日志
  • 做国外的营销的网站官方网站撰写策划书
  • dmp导出到asm可以吗?
  • lprm命令 – 移除打印队列中的任务
  • BuildingAI二开 用户信息增加Coze套餐名称和剩余天数PRD
  • 网站建设有几种方法如何建设一个网站站
  • 格朗图手表网站网站建设服务亮点
  • 银行“两地三中心”网络高可用运维监控方案
  • 基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
  • 沈阳餐饮网站建设wordpress搜索功能调用
  • 网站建设公司如何签单上海的设计网站有哪些内容
  • 断层错动和近断层地震动联合作用下软岩隧洞衬砌损伤分析
  • 2025字节跳动工程训练营(测开)
  • 三轴云台之磁场定向控制技术
  • 盘县网站建设福州网站设计公司
  • MiniEngine学习笔记 : RootSignature
  • 企业建设门户网站成本如何外贸网店建站模板
  • 吴川手机网站建设公司招代理最好的推广方式
  • mid360实现路径规划
  • 下载了网站建设asp网站建设框架注意事项
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(14):文法和单词-第三课
  • soho 网站建设网站上搜索的动图怎么做壁纸
  • 评测:10 款安卓备份软件和应用(最新资讯)
  • Responses API——OpenAI 下一代智能体与多模态 API 完整开发者指南
  • 自然语言处理实战——基于IMDB影评的情感分析
  • 邹平网站建设微网站建设比较全面的是