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

【蓝桥杯专题】 树状数组(C++ | 洛谷 | acwing | 蓝桥)

菜狗现在才开始备战蓝桥杯QAQ

文章目录

  • 【蓝桥杯专题】 (C++ | 洛谷 | acwing | 蓝桥)
    • 什么是线段数组??
    • 1264. 动态求连续区间和
    • 数星星
    • 线段树
    • AcWing 1270. 数列区间最大值
    • P
  • P
  • P
  • P
  • P
  • P
  • P

在这里插入图片描述

【蓝桥杯专题】 (C++ | 洛谷 | acwing | 蓝桥)

什么是线段数组??

OI wiki

  • 树状数组是一种支持 单点修改区间查询 的,代码量小的数据结构。
  • 俩个操作的时间复杂度均为O(logn)
    在这里插入图片描述

在这里插入图片描述

  • lowbit()函数
    在这里插入图片描述
int lowbit(int x) { // 返回二进制中最后一个 1// x 的二进制中,最低位的 1 以及后面所有 0 组成的数。// lowbit(0b01011000) == 0b00001000//          ~~~~^~~~// lowbit(0b01110010) == 0b00000010//          ~~~~~~^~return x & -x;
}

在这里插入图片描述

1264. 动态求连续区间和

在这里插入图片描述
链接 链接

#include<bits/stdc++.h>using namespace std;const int N=100009;int a[N],tr[N];int n,m;//每个数的间隔,背下来就行
int lowbit(int x)
{return x&-x;
}//第x个数加上v
int add(int x,int v)
{//因为树状数组的性质,加一个数,只影响logn个数,所有不用全加完//从当前位置开始加,每个间隔是lowbit(i),一直加到最后for(int i=x;i<=n;i+=lowbit(i))tr[i]+=v;
}//返回x的前缀和
int qurry(int x)
{//因为树状数组的性质,求前缀和,只用加logn个数,所有不用全加完//从当前位置开始累加,每个间隔是lowbit(i),一直加到i==0停止int cnt=0;for(int i=x;i!=0;i-=lowbit(i))cnt+=tr[i];return cnt;
}int main()
{cin>>n>>m;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)add(i,a[i]);//第i个数加上a[i]while(m--){int k,x,y;scanf("%d%d%d",&k,&x,&y);if(k==0) printf("%d\n",qurry(y)-qurry(x-1));else add(x,y);}return 0;}

数星星

由于本题输入数据很特殊,所以其实等价于求一下,到目前的输入为止,有多少个星星的 x 值小于等于该星星的 x 就可以了,这就代表该星星的等级。

由于该题y不递减的输入特性,导致了y在题目中毫无作用
链接 链接


#include <bits/stdc++.h>
// #include <iostream>
using namespace std;
typedef long long ll;
typedef double db;
#define rep(i, a, n) for(int i = a; i <= n; i ++)
#define per(i, a, n) for(int i = n; i <= a; i --)
#define pb push_back;
#define fs first;
#define sz second;
#include <stdlib.h> // atoi
#define debug cout<<"debug"<<"\n"
#define endl "\n";
const int INF = 0x3f3f3f3f;
const int mod=1e9+7;
const int N = 1e5 + 10;
int n;
int ans[N];
int c[N];int lowbit(int  x) {return x & -x;
}void add(int x, int v) {//更新整棵树for(int i = x; i <= 32001; i += lowbit(i)) {c[i] += v;}
}// 计算前缀和
int query(int x) {int res = 0;for(int i = x; i > 0; i -= lowbit(i)) res += c[i];return res;
}void solve () {cin >> n;rep(i, 1, n) {int x, y;cin >> x >> y;x ++;/*为了防止出现0的情况,给它全体横坐标加上 1 就好了。这其实是一个很小的细节,作者但是做的时候没考虑到然后就wa了,而给每个 x 都加上 1 并不会影响结果*/add(x, 1);ans[query(x)] ++; /*然后查一下它的前缀和是多少,前缀和是多少就意味着是多少级这是一个动态变化的过程,而且后面的一定比前面高所以要实时计算*/}for(int i = 1;i <= n; i ++) {printf("%d\n",ans[i]);//输出每一个等级的数量}}int main(void){freopen("in.txt","r",stdin);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;// cin >> T;while(T --) solve();return 0;
}

线段树

链接 链接
在这里插入图片描述
支持:单点修改 区间查询 , 时间复杂度均为log n


//定义节点
struct node{int l,r;//左右区间int sum;//总和
}tr[N*4];//记得开 4 倍空间   (满2叉树 2N - 1 还有空节点  所以为 4N)void push_up(int u) {//利用它的两个儿子来算一下它的当前节点信息 //左儿子 u<<1 ,右儿子 u<<1|1  
}void build(int u,int l,int r) {/*第一个参数,当前节点编号,第二个参数,左边界,第三个参数,右边界*///如果当前已经是叶节点了,那我们就直接赋值就可以了//否则的话,说明当前区间长度至少是 2 对吧,那么我们需要把当前区间分为左右两个区间,那先要找边界点//这里记得赋值一下左右边界的初值//边界的话直接去计算一下 l + r 的下取整//先递归一下左儿子//然后递归一下右儿子//做完两个儿子之后的话呢 push_up 一遍u 啊,更新一下当前节点信息}int query(int u,int l,int r)//查询的过程是从根结点开始往下找对应的一个区间
{//如果当前区间已经完全被包含了,那么我们直接返回它的值就可以了//否则的话我们需要去递归来算//计算一下我们 当前 区间的中点是多少//先判断一下和左边有没有交集//用 sum 来表示一下我们的总和//看一下我们当前区间的中点和左边有没有交集//看一下我们当前区间的中点和右边有没有交集}void modify(int u,int x,int v)//第一个参数也就是当前节点的编号,第二个参数是要修改的位置,第三个参数是要修改的值
{//如果当前已经是叶节点了,那我们就直接让他的总和加上 v 就可以了//否则//看一下 x 是在左半边还是在右半边//如果在右半边,那就找右儿子//更新完之后当前节点的信息就要发生变化对吧,那么我们就需要 pushup 一遍
}

AcWing 1270. 数列区间最大值

链接 链接

  • 思路和线段树类似, sum 改为 maxv
#include <iostream>
#include <cstring>
#include <algorithm>
#include <limits.h>
using namespace std;
const int N = 100010;
int w[N], n, m;struct Segnode {int l, r, maxv; // 把记录区间和的sum换成了记录区间最大值的maxv
}seg[4 * N];void build (int u, int l, int r) {if(l == r) seg[u] = {l, r, w[r]};else {int mid = l + r >> 1;seg[u] = {l , r};build(u * 2, l, mid), build(u * 2 + 1, mid +1 , r);seg[u].maxv = max (seg[u * 2].maxv, seg[u * 2 + 1].maxv);}
}int query(int u, int l, int r) {if(seg[u].l >= l && seg[u].r <= r) return seg[u].maxv ;int res = INT_MIN;int mid = seg[u].l + seg[u].r >> 1;if(r > mid ) res = max(res, query(u * 2 + 1, l , r));if(l <= mid) res = max(res, query(u * 2 , l, r));return res;
}int main()
{int l, r;scanf("%d %d", &n, &m);for (int i = 1; i <= n; ++ i)   scanf("%d", &w[i]);build(1, 1, n);while (m --) {scanf("%d %d", &l, &r);printf("%d\n", query(1, l, r));}return 0;
}

P

链接 链接

P

链接 链接

P

链接 链接

P

链接 链接

P

链接 链接

P

链接 链接

P

链接 链接

在这里插入图片描述

相关文章:

【蓝桥杯专题】 树状数组(C++ | 洛谷 | acwing | 蓝桥)

菜狗现在才开始备战蓝桥杯QAQ 文章目录【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&#xff09;什么是线段数组??1264. 动态求连续区间和数星星线段树AcWing 1270. 数列区间最大值PPPPPPP【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&#xff09; 什么是…...

QCefView编译配置(Windows-MSVC)(11)

QCefView编译配置&#xff08;Windows-MSVC&#xff09; 文章目录QCefView编译配置&#xff08;Windows-MSVC&#xff09;1、概述2、准备工作3、添加环境变量4、更换cef源码版本5、CMake构建6、Visual Studio编译7、安装编译后的文件8、验证编译结果更多精彩内容&#x1f449;个…...

Token原理

Q&#xff1a;分布式场景下如何生成token以及使用token的流程&#xff1a; 在分布式场景下&#xff0c;可以采用以下方式生成 token 和进行权限认证&#xff1a; 1. 生成 token&#xff1a; 使用JWT&#xff08;JSON Web Token&#xff09;生成 token。JWT 是一种基于 JSON …...

③【Java组】蓝桥杯省赛真题 持续更新中...

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 蓝桥杯真题--持续更新中...一、错误票据题目描…...

linux实验之shell编程基础

这世间&#xff0c;青山灼灼&#xff0c;星光杳杳&#xff0c;秋风渐渐&#xff0c;晚风慢慢 shell编程基础熟悉shell编程的有关机制&#xff0c;如标准流。学习Linux环境变量设置文件及其内容/etc/profile/etc/bashrc/etc/environment~/.profile~/.bashrc熟悉编程有关基础命令…...

C语言小程序:通讯录(静态版)

哈喽各位老铁们&#xff0c;今天给大家带来一期通讯录的静态版本的实现&#xff0c;何为静态版本后面会做解释&#xff0c;话不多说&#xff0c;直接开始&#xff01;关于通讯录&#xff0c;其实也就是类似于我们手机上的通讯录一样&#xff0c;有着各种各样的功能&#xff0c;…...

写CSDN博客两年半的收获--总结篇

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;练习时长两年半的java博主 &#x1f39f;️个人主页&#xff1a;君临๑ ps&#xff1a;点赞是免费的&#xff0c;却可以让写博客的作者开心好几天&#x1f60e; 不知不觉间&#xff0c;在csdn写博客也有两年半的时间了&#x…...

中科亿海微FPGA应用(一、点灯)

1.软件&#xff1a; https://download.csdn.net/download/weixin_41784968/87564071 需要申请license才能使用&#xff1a;软件试用申请_软件试用申请_中科亿海微电子科技&#xff08;苏州&#xff09;有限公司 2.开发板&#xff1a; 芯片EQ6HL45&#xff0c;42.5k LUT。 3…...

ElasticSearch - SpringBoot整合ES:实现搜索结果排序 sort

文章目录00. 数据准备01. Elasticsearch 默认的排序方式是什么&#xff1f;02. Elasticsearch 支持哪些排序方式&#xff1f;03. ElasticSearch 如何指定排序方式&#xff1f;04. ElasticSearch 如何按照相关性排序&#xff1f;05. ElasticSearch 查询结果如何不按照相关性排序…...

IDEA的全新UI可以在配置里启用了,快来试试吧!

刚看到IDEA官方昨天发了这样一条推&#xff1a;IDEA的新UI可以在2022.3版本上直接使用了&#xff01;开启方法如下&#xff1a;打开IDEA的Setting界面&#xff0c;在Appearance & Behavior下有个被标注为Beta标签的New UI菜单&#xff0c;具体如下图&#xff1a;勾选Enable…...

第九章 镜像架构和规划 - 备份处于活动状态时自动进行故障转移

文章目录第九章 镜像架构和规划 - 备份处于活动状态时自动进行故障转移备份处于活动状态时自动进行故障转移备份不活动时的自动故障转移对各种中断场景的镜像响应响应主要中断场景的自动故障转移第九章 镜像架构和规划 - 备份处于活动状态时自动进行故障转移 备份处于活动状态…...

Barra模型因子的构建及应用系列七之Liquidity因子

一、摘要 在前期的Barra模型系列文章中&#xff0c;我们构建了Size因子、Beta因子、Momentum因子、Residual Volatility因子、NonLinear Size因子和Book-to-Price因子&#xff0c;并分别创建了对应的单因子策略&#xff0c;其中Size因子和NonLinear Siz因子具有很强的收益能力…...

走进二叉树的世界 ———性质讲解

二叉树的性质和证明前言1.二叉树的概念和结构特殊的二叉树&#xff1a;二叉树的性质前言 本篇博客主要讲述的是有关二叉树的一些概念&#xff0c;性质以及部分性质的相关证明&#xff0c;如果大伙发现了啥错误&#xff0c;可以在评论区指出&#x1f618;&#x1f618; 1.二叉树…...

【SSM】Spring + SpringMVC +MyBatis 框架整合

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ SSM框架整合一、导入相关依赖二、配置web.xml文…...

【算法基础】一篇文章彻底弄懂Dijkstra算法|多图解+代码详解

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;算法、数据结构、Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: 算法 &#xff1b;该专栏专注于蓝桥杯和ACM等算法竞赛&#x1f525;近期目标&…...

第二十三天01MySQL多表查询与事务

目录 1. 多表查询 1.1 概述 1.1.1 数据准备 1.1.2 介绍 1.1.3 分类 1.2 内连接 1.2.1 语法 1.2.2 案例演示 1.3 外连接 1.3.1 语法 1.3.2 案例演示 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 1.5 案例 1.5.1 介…...

TCP协议详解

1.TCP的准备条件在古代的时候&#xff0c;古人们经常写书信进行交流&#xff0c;写书信的前提是你要知道这份信是要寄给谁在网络中&#xff0c;我们通过ip端口号找对目标对象&#xff0c;但是现在网站一般会对ip端口注册一个域名&#xff0c;所以我们一般就是对域名进行查找&am…...

Activiti7与Spring、Spring Boot整合开发

Activiti整合Spring 一、Activiti与Spring整合开发 1.1 Activiti与Spring整合的配置 1)、在pom.xml文件引入坐标 如下 <properties><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version> </properties> <d…...

基于SpringBoot实现冬奥会运动会科普平台【源码+论文】

基于SpringBoot实现冬奥会科普平台演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#…...

一文吃透SpringBoot整合mybatis-plus(保姆式教程)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

C++ primer plus(第六版)编程练习答案 第4章 复合类型

一、程序清单 arrayone.cpp // arrayone.cpp -- small arrays of integers #include <iostream> int main() {using namespace std;int yams[3]; // creates array with three elementsyams[0] = 7; // assign value to first elementyams[1] = 8;yams[2] = 6;i…...

Kafka源码分析之Producer(一)

总览 根据kafka的3.1.0的源码example模块进行分析&#xff0c;如下图所示&#xff0c;一般实例代码就是我们分析源码的入口。 可以将produce的发送主要流程概述如下&#xff1a; 拦截器对发送的消息拦截处理&#xff1b; 获取元数据信息&#xff1b; 序列化处理&#xff1b;…...

springboot校友社交系统

050-springboot校友社交系统演示录像开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;e…...

python flask项目部署

flask上传服务器pyhon安装下载Anacondasudo wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh可根据需要安装对应的版本https://repo.anaconda.com/archive/解压anaconda压缩包bash Anaconda3-5.3.1-Linux-x86_64.sh解压过程中会…...

常见排序算法(C语言实现)

文章目录排序介绍插入排序直接插入排序希尔排序选择排序选择排序堆排序交换排序冒泡排序快速排序递归实现Hoare版本挖坑法前后指针版本非递归实现Hoare版本挖坑法前后指针版本快排的优化三值取中小区间优化归并排序递归实现非递归实现计数排序排序算法复杂度及稳定性分析不同算…...

基于jsp+ssm+springboot的小区物业管理系统【设计+论文+源码】

摘 要随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于小区物业管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了小区物业管理系统&#xff0c;它彻底改变了过去…...

Elasticsearch 学习+SpringBoot实战教程(三)

需要学习基础的可参照这两文章 Elasticsearch 学习SpringBoot实战教程&#xff08;一&#xff09; Elasticsearch 学习SpringBoot实战教程&#xff08;一&#xff09;_桂亭亭的博客-CSDN博客 Elasticsearch 学习SpringBoot实战教程&#xff08;二&#xff09; Elasticsearch …...

try-with-resource

try-with-resource是Java 7中引入的新特性&#xff0c;它可以方便地管理资源&#xff0c;自动关闭资源&#xff0c;从而避免了资源泄漏的问题。 作用 使用try-with-resource语句可以简化代码&#xff0c;避免了手动关闭资源的繁琐操作&#xff0c;同时还可以保证资源的正确关闭…...

leetcode148_排序链表的3种解法

1. 题目2. 解答 2.1. 解法12.2. 解法22.3. 解法3 1. 题目 给你链表的头结点head&#xff0c;请将其按升序排列并返回排序后的链表。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullp…...

使用stm32实现电机的PID控制

使用stm32实现电机的PID控制 PID控制应该算是非常古老而且应用非常广泛的控制算法了&#xff0c;小到热水壶温度控制&#xff0c;大到控制无人机的飞行姿态和飞行速度等等。在电机控制中&#xff0c;PID算法用的尤为常见。 文章目录使用stm32实现电机的PID控制一、位置式PID1.计…...

注册网站公司/潍坊seo按天收费

MySQL占用内存太大&#xff0c;而SQLite是一款轻量级零配置数据库&#xff0c;非常适合在树莓派和其他嵌入式系统中使用。SQLite文档详细资料丰富&#xff0c;本文不会详细解释SQLite数据库操作的方方面面&#xff0c;只能结合具体场景按需说明。本文介绍的SQLite技巧也可以在其…...

南充做网站/宁波核心关键词seo收费

0 说明一直想弄个界面显示下船舶轨迹&#xff0c;恰好前段时间有个朋友说想弄个地图做显示&#xff0c;瞬间心血来潮&#xff01;&#xff01;&#xff01;于是在浩浩荡荡的度娘上搜索python的可视化地图开源代码&#xff0c;大部分人推荐用pyecharts&#xff0c;恰好看到了[py…...

网站开发遵循/免费的外贸b2b网站

45.买股票的最佳时机 题目描述 假设你有一个数组&#xff0c;其中第\ i i 个元素是股票在第\ i i 天的价格。 你有一次买入和卖出的机会。&#xff08;只有买入了股票以后才能卖出&#xff09;。请你设计一个算法来计算可以获得的最大收益。 输入 [1,4,2]返回值 3输入 [2…...

自己可以做英文网站么/深圳百度推广开户

对即将毕业的大学生而言&#xff0c;要面临的是毕业设计、论文答辩&#xff0c;为了能拿到更高的分数并顺利的完成毕业&#xff0c;在进行论文答辩的时候做一份开题报告论文答辩PPT是不错的选择呢。可在制作过程中也有会有存在一些棘手的问题&#xff1a;1、不会做&#xff0c;…...

从0开始做网站/矿产网站建设价格

通常我们在学习CSS的时候&#xff0c;感觉语法很容易掌握&#xff0c;实际应用中却碰到各式各样难以填补的“坑”。为避免大家受到同样的困惑与不解&#xff0c;本文详细讲解了CSS中优先级和Stacking Context等高级特性。让你更深入了解CSS。CSS 优先级优先级是浏览器是通过判断…...

中铁建设门户网登录入口手机端/网店关键词怎么优化

昨天写了篇博客&#xff0c;介绍了一下我对node.js的第一次亲密接触后的感受&#xff0c;以为node.js很小众&#xff0c;出乎我意料很多人感兴趣&#xff0c;并且对博客中的细节问题做了评论&#xff0c;最多的是围绕node.js的异步与单线程展开的&#xff0c;当然还有很多关于n…...