线状数组

线状数组是一个查询和复杂度都是log(n)的数据结构,主要用来查询任意两位之间的所有元素之和,但每次只能修改一个元素的值,
数组a[]— 用来存放原始数据,c[]–就是树状数组,c[t] – 表示t管辖区间元素之和。
c[t] --管辖里2k个区间,k是t在二进制下末尾0的个数例如:8=(1000),那么管辖23=8个数。例如5 = (101)那么管辖20=1个数;
下面这个图非常直观;

在这里插入图片描述

如何计算t管辖的区间打下:(求t对应的2k);
下面两种皆可:

int lowbit(int x)
{return x&(x^(t-1));
}int lowbit(int x)
{return x&(-x);
}

n-lowbit(n) 将n二进制中最后一个(末尾)的1减去

点修改,区间查询

#include <bits/stdc++.h>
using namespace std;int n,m;
int a[50005],c[50005]; //对应原数组和树状数组int lowbit(int x){return x&(-x);
}void updata(int i,int k){    //在i位置加上kwhile(i <= n){c[i] += k;i += lowbit(i);}
}int getsum(int i){        //求A[1 - i]的和int res = 0;while(i > 0){res += c[i];i -= lowbit(i);}return res;
}int main(){int t;cin>>t;for(int tot = 1; tot <= t; tot++){cout << "Case " << tot << ":" << endl;memset(a, 0, sizeof a);memset(c, 0, sizeof c);cin>>n;for(int i = 1; i <= n; i++){cin>>a[i];updata(i,a[i]);   //输入初值的时候,也相当于更新了值}string s;int x,y;while(cin>>s && s[0] != 'E'){cin>>x>>y;if(s[0] == 'Q'){    //求和操作int sum = getsum(y) - getsum(x-1);    //x-y区间和也就等于1-y区间和减去1-(x-1)区间和cout << sum << endl;}else if(s[0] == 'A'){updata(x,y);}else if(s[0] == 'S'){updata(x,-y);    //减去操作,即为加上相反数}}}return 0;
}

区间更新,单点查询;

int n,m;
int a[50005] = {0},c[50005]; //对应原数组和树状数组int lowbit(int x){return x&(-x);
}void updata(int i,int k){    //在i位置加上kwhile(i <= n){c[i] += k;i += lowbit(i);}
}int getsum(int i){        //求D[1 - i]的和,即A[i]值int res = 0;while(i > 0){res += c[i];i -= lowbit(i);}return res;
}int main(){cin>>n;27     for(int i = 1; i <= n; i++){cin>>a[i];updata(i,a[i] - a[i-1]);   //输入初值的时候,也相当于更新了值}//[x,y]区间内加上kupdata(x,k);    //A[x] - A[x-1]增加kupdata(y+1,-k);        //A[y+1] - A[y]减少k//查询i位置的值int sum = getsum(i);return 0;
}

区间修改,区间查询

int n,m;
int a[50005] = {0};
int sum1[50005];    //(D[1] + D[2] + ... + D[n])
int sum2[50005];    //(1*D[1] + 2*D[2] + ... + n*D[n])int lowbit(int x){return x&(-x);
}void updata(int i,int k){int x = i;    //因为x不变,所以得先保存i值while(i <= n){sum1[i] += k;sum2[i] += k * (x-1);i += lowbit(i);}
}int getsum(int i){        //求前缀和int res = 0, x = i;while(i > 0){res += x * sum1[i] - sum2[i];i -= lowbit(i);}return res;
}int main(){cin>>n;for(int i = 1; i <= n; i++){cin>>a[i];updata(i,a[i] - a[i-1]);   //输入初值的时候,也相当于更新了值}//[x,y]区间内加上kupdata(x,k);    //A[x] - A[x-1]增加kupdata(y+1,-k);        //A[y+1] - A[y]减少k//求[x,y]区间和int sum = getsum(y) - getsum(x-1);return 0;
}

代码来源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55334.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在UnityUI中绘制线状统计图

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 先来个效果图 觉得不好看可以自己调整 1.绘制数据点 线状图一般由数据点和连线组…

数据可视化 - 柱状图+线状图

import pyecharts.options as opts from pyecharts.charts import Bar, Line""" Gallery 使用 pyecharts 1.1.0 参考地址: https://www.echartsjs.com/examples/editor.html?cmix-line-bar目前无法实现的功能:1、暂无 """x_data ["1月&qu…

【ArcGIS微课1000例】0034:地图线状符号设计教程

地图符号是表示地图内容的基本手段,它由形状不同、大小不一、色彩有别的图形和文字组成。 地图符号是地图的语言,是一种图形语言。它与文字语言相比较,最大的特点是形象直观,一目了然。 本文讲解ArcGIS中线状符号设计方法。 文章目录 一、新建符号样式二、线状符号设计1. 点…

去除图像周期性线状噪声

本文主要讲述的是如何去除图像中周期性的线性噪声&#xff0c;尝试过的方法从空域的开关中值滤波到频域的陷波滤波等&#xff0c;在此做个总结&#xff0c;其中陷波滤波的尝试失败&#xff0c;效果并不理想&#xff0c;而开关中止滤波的效果很好。 图1&#xff1a;带周期性线条…

echarts_线状图.html

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>线状图</title><script src"echarts.js"></script> </head><body><div id"main" style"width: 600px;height:…

echarts线状图

<div id"mycharts" ref"chartBox"> <span v-html"loading"></span></div> //引入线状图import echarts/lib/chart/line //echarts配置&#xff08;挂载时导入图&#xff09;creatChartFun(){ this.myChart echar…

python线状图

import numpy as np import matplotlib.pyplot as plt xnp.linspace(0,2*np.pi,10) y1,y2np.sin(x),np.cos(x) plt.plot(x,y1,markero,mecr,mfcw)//mec设置折点处图形轮廓的颜色&#xff0c;mfc设置实心的颜色 plt.plot(x,y2,marker*,ms10) plt.show()

功能很全的图书馆管理系统

个人资源与分享网站&#xff1a;http://xiaocaoshare.com/ 1.需求 1.1 bootstrapspringspringmvcmybatis&#xff0c;用maven构建 1.2分管理员和用户两个角色。用户可以查询&#xff0c;借阅归还&#xff0c;修改个人信息&#xff0c;查看借阅信息。 管理员有图书管理&…

基于QT实现的图书室管理系统

基于QT实现的图书室管理系统 图书室管理系统 该系统需创建和管理以下信息: 1、书籍信息:书名、书目编号、作者名、出版日期、出版社、库存册数、登记号数据集; 2、每册书的登记信息:登记号、是否借出、借阅日期、借书证号。 系统功能要求如下: 1.创建和管理描述每本书籍的对…

基于微信公众号的图书借阅管理系统设计与实现

目录 1 引言 2 1.1项目研究背景 4 1.2 项目研究内容 6 1.3 项目研究意义 7 2 技术选型与开发环境 9 2.1 技术选型 9 2.1.1Node.js介绍 9 2.1.2 异步编程介绍 10 2.1.3 阻塞和非阻塞介绍 11 2.1.4 MySQL数据库介绍 12 2.1.5 Nginx服务器介绍 14 2.1.6StrongLoop进程管理器介绍 1…

微信小程序图书馆管理系统

开发工具&#xff1a;IDEA、微信小程序 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;vue、uniapp 服务端技术&#xff1a;springbootmybatis-plus 本系统分微信小程序和管理后台两部分&#xf…

图书馆管理系统——借书操作

在写借书操作之前我们先来理清一下借书操作的一个思路 假如你借了“红楼梦”这本书&#xff0c;你就不能再借“红楼梦”这本书了。你就得把“红楼梦”这本书归还了之后才可以借“红楼梦”。但是其他的书籍你可以借阅。意思就是一个账号一本书只能借一次&#xff0c;只有你归还…

网上图书馆系统

网上图书馆系统 题目 设计一个网上图书馆系统&#xff0c;实现图书网上检索、预约和续借功能。具体要求如下&#xff1a; 1)系统管理&#xff1a;定义读者类别并设置参数&#xff0c;添加、修改和删除读者信息。 2)图书续借和预约&#xff1a;实现图书的续借、预约等功能。 3)…

图书馆管理系统(数据库版)

图书馆管理系统&#xff08;数据库版&#xff09; 目录&#xff1a; 图书馆管理系统&#xff08;数据库版&#xff09;项目框架项目分包数据库列表代码分析工具包所用到的接口&#xff1a; 分享一波&#xff1a;总结&#xff1a; 项目框架 项目分包 上面为本次项目的分包建包示…

图书馆管理系统的开发

课程设计的目的与要求 课程设计目的软件工程课程设计是学习软件工程课程后所进行的实践环节,目的是培养学生用工程化的思想和标准文档化的思想进行软件开发。本次课程设计通过开发一个小型实用的软件系统,亲身体验软件生命周期中的各个环节,以加深对软件工程课程的深入理解、…

基于微信小程序图书馆管理系统

开发工具&#xff1a;IDEA、微信小程序 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;vue、uniapp 服务端技术&#xff1a;springbootmybatis-plus 本系统分微信小程序和管理后台两部分&#xf…

智慧图书馆中一般有哪些设备

图书馆在很多人心目中都是一个神圣的场所&#xff0c;但现实中去过图书馆的人们都知道&#xff0c;由于管理上的原因很多图书馆都会非常的嘈杂和混乱。而智慧图书馆的建设就是让图书馆重新变回宁静祥和的知识海洋&#xff0c;通过RFID技术打造智慧化设备为读者提供更好的学习阅…

自助借还系统——智慧图书馆的新体验

自助借还系统主要用于智慧图书馆图书自助借还、查询、续借等&#xff0c;具有多本书同时识别处理&#xff0c;多卡识别功能&#xff0c;红外线感应技术&#xff0c;内置人脸识别模块和协议标准&#xff0c;系统具有ISO1800-3、ISO15693物流网工作协议&#xff0c;可无缝对接智慧…

基于微信的图书馆服务系统的设计与实现

随着时代的快速进步&#xff0c;“互联网”一词概念逐渐深入人心&#xff0c;新兴产业蓬勃发展&#xff0c;传统产业深刻重塑。传统行业与互联网的结合成为了必然的趋势。在时代的大背景下&#xff0c;高校图书馆如何突破原有服务壁垒、精准把握需求&#xff0c;人性化服务&…

图书馆管理系统(一)

图书馆管理系统 项目说明项目内容&#xff08;1&#xff09;读者信息管理&#xff1a;&#xff08;2&#xff09;图书信息管理&#xff1a;&#xff08;3&#xff09;图书借阅管理&#xff1a;&#xff08;4&#xff09;基础信息维护&#xff1a;&#xff08;5&#xff09;用户…