wordpress 开发搜索框/seo黑帽技术工具

wordpress 开发搜索框,seo黑帽技术工具,做企业公司网站,上海易雅达网站建设公司怎么样树状数组 简介 1.应用 1.单点修改区间查询 2.区间修改单点查询(差分) 3.区间修改区间查询(差分公式) 总而言之,就是动态维护前缀和。 2.树状结构图 3.lowbit函数 我们知道,任何一个正整数都可以被表示成一个二进制数。如: ( 2 ) 10 ( 10 ) 2 (2)_{10…

树状数组

简介

1.应用

1.单点修改区间查询
2.区间修改单点查询(差分)
3.区间修改区间查询(差分+公式)
总而言之,就是动态维护前缀和。

2.树状结构图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.lowbit函数

我们知道,任何一个正整数都可以被表示成一个二进制数。如:

( 2 ) 10 = ( 10 ) 2 (2)_{10}=(10)_2 (2)10=(10)2
( 4 ) 10 = ( 100 ) 2 (4)_{10}=(100)_2 (4)10=(100)2

那么定义一个函数 f = l o w b i t ( x ) f=lowbit(x) f=lowbit(x),这个函数的值是 x x x二进制表达式中最低位的 1 1 1所对应的值。

比如:

( 6 ) 10 = ( 110 ) 2 (6)_{10}=(110)_2 (6)10=(110)2
那么 l o w b i t ( 6 ) lowbit(6) lowbit(6)就等于 2 2 2,因为 ( 110 ) 2 (110)_2 (110)2中最低位(就是从右往左数的第二位)对应的数是 2 1 = 2 2^1=2 21=2

所以假设一个数的二进制最低位的 1 1 1在从右往左数的第 k k k位,那么它的 l o w b i t lowbit lowbit值就是

2 k − 1 2^{k−1} 2k1

x & − x x \& -x x&x的原理
我们都知道机一个数在计算机中是以补码的方式存储的

而负数的补码有这样一种求法:先求出这个数的正数的补码,然后从低位开始知道第一个 1 1 1之前(包括这个 1 1 1)的所有数不变,后面的所有数取反。

现在再来看 x & − x x\&-x x&x,我们发现,对 x x x − x -x x进行与运算之后,二进制下低位第一个 1 1 1之前的所有数(包括这个 1 1 1本身)不变,而高位所有数为0(一个数与上自己的取反的数)。

此时两个数与运算后得到的二进制数是: . . . 1... ...1... ...1...

就正是二进制表达式中最低位的 1 1 1所对应的值。

4. a d d add add 函数

a d d add add 函数中,我们是通过 x + l o w b i t ( x ) x+lowbit(x) x+lowbit(x) 取到 x x x 的父节点的。原理是什么呢?
首先, x x x 的父节点一定是树中高度比 x x x 高的节点中最矮的那个节点。
例如 6 6 6 的父节点是 8 8 8 而不是 16 16 16(高度比 8 8 8 高),也不是 7 7 7 (高度比 6 6 6 低)。
而树的高度是由 l o w b i t ( x ) lowbit(x) lowbit(x) 决定的。
因此, x x x 的高度就是 l o w b i t ( x ) lowbit(x) lowbit(x),比它高的节点中高度最低的节点的高度假设为 l o w b i t ( j ) lowbit(j) lowbit(j),那么 l o w b i t ( j ) lowbit(j) lowbit(j) 肯定就是 x + l o w b i t ( x ) x+lowbit(x) x+lowbit(x)
他满足高度比 l o w b i t ( x ) lowbit(x) lowbit(x) 高,因为, x + l o w b i t ( x ) x+lowbit(x) x+lowbit(x) 会使得 x x x 的最低位的 1 1 1 一定更高了。
其次,他也满足最低。结合二进制理解,例如 x = 01010 x=01010 x=01010 l o w b i t ( x ) = 2 lowbit(x)=2 lowbit(x)=2,那么我们肯定希望 l o w b i t ( j ) = 100 = 4 lowbit(j)=100=4 lowbit(j)=100=4
此时 x + l o w b i t ( x ) = 01100 x+lowbit(x)=01100 x+lowbit(x)=01100,其 l o w b i t ( ) = 100 lowbit()=100 lowbit()=100




应用一:单点修改,区间查询

PROCESS1: 题目链接

题目大意:求形如“山峰”或者“山谷”状三元组的数量

PROCESS2:思路

  1. 从暴力出发 O ( N 2 ) O(N^2) O(N2)

我们可以预处理出来每个点左侧和右侧大于和小于它的点的数量,然后相乘即可(乘法原理)

  1. 树状数组 O ( N l o g 2 N ) O(Nlog_2^N) O(Nlog2N)

树状数组中一种常用的求小于或者与某一个点的数量的方法:将原数组的权值映射到该点在树状数组的下标(经常与离散化结合使用)。例如 t r [ 3 ] = 5 tr[3]=5 tr[3]=5就表示权值为 3 3 3的点有 5 5 5个。这样在树状数组中求小于某一个数y的数的数量,就可以直接求 y y y之前的前缀和,这个前缀和就代表所有小于 y y y的数的个数和。
但这样就无法同时预处理一个点左侧小于它的点的数量和右侧小于它的点的数量,所以我们需要操作两侧,第一次预处理左侧的,然后第二次处理右侧时直接求结果即可。

注意答案可能爆int

PROCESS3:代码

点击查看代码
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 200010;int n, a[N], g[N], l[N];
int tr[N];int lowbit(int x)
{return x & -x;
}void add(int x, int c)
{for(int i = x; i <= n; i += lowbit(i))  tr[i] += c;
}int get(int x)
{int res = 0;for(int i = x; i; i -= lowbit(i))  res += tr[i];return res;
}int main()
{cin >> n;for(int i = 1; i <= n; i ++ )   cin >> a[i];for(int i = 1; i <= n; i ++ ){int y = a[i];g[i] = get(n) - get(y);l[i] = get(y); add(y, 1);}memset(tr, 0, sizeof tr);long long res1 = 0, res2 = 0;for(int i = n; i >= 1; i -- ){int y = a[i];res1 += (long long)(get(n) - get(y)) * g[i];//这里会爆intres2 += (long long)get(y) * l[i];add(y, 1);}cout << res1 << ' ' << res2 << endl;return 0;
}



应用二:区间修改,单点查询

PROCESS1:例题链接

PROCESS2:思路

把树状数组看做差分数组,差分数组的前缀和就是某个点的权值

PROCESS3:代码

点击查看代码
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 100010;int n, m;
int tr[N], a[N];int lowbit(int x)
{return x & -x;
}void add(int x, int c)
{for(int i = x; i <= n; i += lowbit(i))  tr[i] += c;
}int sum(int x)
{int res = 0;for(int i = x; i; i -= lowbit(i))   res += tr[i];return res;
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i ++ )   cin >> a[i];for(int i = 1; i <= n; i ++ )   add(i, a[i] - a[i - 1]);while (m -- ){string op;cin >> op;if(op == "C"){int l, r, c;cin >> l >> r >> c;add(l, c);add(r + 1, -c);}else{int x;cin >> x;cout << sum(x) << endl;}}return 0;
}



应用三:区间修改,区间查询

PROCESS1:题目链接

PROCESS2:思路

由于涉及到区间修改,那么我们只能用树状数组模拟差分数组,否则区间修改的时间复杂度必然是 O ( N ) O(N) O(N)的。
此时,区间[1, n]的和为蓝色区域所示(b为树状数组)(a为原数组)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
如果我们把该蓝色区域的补集(红色区域加上)
总的矩阵就是: ( n + 1 ) ∗ ∑ 1 n b i = ( n + 1 ) ∗ a n (n + 1) * \sum_{1}^{n}b_i = (n + 1) * a_n (n+1)1nbi=(n+1)an
再减去红色区域: ∑ 1 n i ∗ b i \sum_{1}^{n}i*b_i 1nibi(竖着看)
就是我们的蓝色区域,也就是区间[1,n]的前缀和
那么,我们只需要在维护一个树状数组,tr[i]=i*b[i]即可

PROCESS3:代码

点击查看代码
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;typedef long long LL;const int N = 100010;int n, m;
LL tr1[N], tr2[N];
int a[N];int lowbit(int x)
{return x & -x;
}void add(LL tr[], int x, LL c)
{for(int i = x; i <= n; i += lowbit(i))  tr[i] += c;
}LL sum(LL tr[], int x)
{LL res = 0;for(int i = x; i; i -= lowbit(i))   res += tr[i];return res;
}LL get(int x)
{return (long long)(x + 1) * sum(tr1, x) - sum(tr2, x); 
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i ++ )   cin >> a[i];for(int i = 1; i <= n; i ++ )  {add(tr1, i, a[i] - a[i - 1]);add(tr2, i, (long long)i * (a[i] - a[i - 1]));}while (m -- ){string op;cin>> op;if(op == "C"){int l, r, c;cin >> l >> r >> c;add(tr1, l, c);add(tr1, r + 1, -c);add(tr2, l, (long long)l * c);add(tr2, r + 1, (long long)-c * (r + 1));}else{int l, r;  cin >> l >> r;cout << get(r) - get(l - 1) << endl;}}return 0;
}



其他例题

例题一

PROCESS1:Acwing
PROCESS2:思路

凡是这类一开始时,所求答案完全未知的问题,应该在边界问题上寻找原问题的突破口。因为对于那些靠近问题空间“中部”的子问题,其“左右两边”可以认为和它是**本质相同的子问题,没有办法直接解决。**因此我们应该着重考虑边界处的子问题。

在本题中,我们首先考虑最后一头牛。由于它已经统计了在它之前的所有牛,因此,假如它比 x x x头牛高,则它的高度一定是 x + 1 x+1 x+1(所有牛的高度是一个 [ 1 , n ] [1, n] [1,n]的排列)。我们采取从后往前考虑的方式,就是因为题目给出了“每头牛已知在自己前面比自己矮的牛的个数”这一条件,从后往前可以少考虑很多问题。

由于每头牛的高度各不相同且取遍区间 [ 1 , n ] [1,n] [1,n],因此,对于倒数第二头牛而言,它应该在除去上述 x + 1 x+1 x+1的区间[ [ 1 , n ] [1,n] [1,n]中,选取 A n − 1 + 1 A_{n−1}+1 An1+1小的数。其他的牛以此类推。

我们可以令树状数组的 t r tr tr表示当前这个数有没有被选,然后二分查询(不然时间复杂度还是 O ( N 2 ) O(N^2) O(N2)的)在没有被选的数当中第 A i + 1 A_{i}+1 Ai+1大的数。初始化 t r [ i ] = 0 , ( i ∈ 1 , n ) tr[i]=0,({i \in {1,n}}) tr[i]=0,(i1,n)表示当前数没有被选,选择一个数之后就把当前数置为 0 0 0

PROCESS3:代码

点击查看代码
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 100010;int n, tr[N], h[N];
int res[N];int lowbit(int x)
{return x & -x;
}void add(int x, int c)
{for(int i = x; i <= n; i += lowbit(i))  tr[i] += c;
}int sum(int x)
{int res = 0;for(int i = x; i >= 1; i -= lowbit(i))  res += tr[i];return res;
}int main()
{cin >> n;for(int i = 2; i <= n; i ++ )   cin >> h[i];for(int i = 1; i <= n; i ++ )   add(i, 1);for(int i = n; i >= 1; i -- ){int l = 0, r = n, goal = h[i] + 1;while(l < r){int mid = l + r >> 1;if(sum(mid) >= goal)    r = mid;else    l = mid + 1;}res[i] = r;add(r, -1);}for(int i = 1; i <= n; i ++ )   cout << res[i] << endl;return 0;
}

例题二

PROCESS1: 蓝桥杯




例题三:

PROCESS1: 蓝桥杯

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

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

相关文章

pytorch+maskRcnn框架训练自己的模型以及模型导出ONXX格式供C++部署推理

背景 maskrcnn用作实例分割时&#xff0c;可以较为精准的定位目标物体&#xff0c;相较于yolo只能定位物体的矩形框而言&#xff0c;优势更大。虽然yolo的计算速度更快。 直接开始从0到1使用maskrCNN训练自己的模型并并导出给C部署&#xff08;亲测可用&#xff09; 数据标注…

PCL配置

1、下载 打开GitHub网站&#xff0c;搜索pcl&#xff0c;选择第一个结果打开&#xff0c;按照下图步骤操作 下载PCL预编译安装程序PCL-1.13.1-AllInOne-msvc2022-win64.exe 和要安装的PCL组件&#xff08;例如pcl-1.13.1-pdb-msvc2022-win64.zip&#xff09; 2、安装 双击 P…

VectorBT:使用PyTorch+LSTM训练和回测股票模型 进阶一

VectorBT&#xff1a;使用PyTorchLSTM训练和回测股票模型 进阶一 本文介绍了如何使用PyTorch和LSTM模型进行股票数据的训练和回测。涵盖了数据预处理、特征选择、LSTM模型构建、模型训练与验证、动态阈值策略生成交易信号以及使用VectorBT进行回测和绩效分析。 文中内容仅限技术…

MantisBT在Windows10上安装部署详细步骤

MantisBT 是一款基于 Web 的开源缺陷跟踪系统&#xff0c;以下是在 Windows 10 上安装部署 MantisBT 的详细步骤&#xff1a; 1. 安装必要的环境 MantisBT 是一个基于 PHP 的 Web 应用程序&#xff0c;因此需要安装 Web 服务器&#xff08;如 Apache&#xff09;、PHP 和数据…

深入理解K8s与Docker的关系:容器化技术的双雄

友情提示&#xff1a;本文内容由银河易创&#xff08;https://ai.eaigx.com&#xff09;AI创作平台gpt-4-turbo模型生成&#xff0c;仅供参考。 在现代云计算及微服务架构的发展中&#xff0c;Docker与Kubernetes&#xff08;K8s&#xff09;作为两大核心技术&#xff0c;被广泛…

蓝桥与力扣刷题(蓝桥 蓝桥骑士)

题目&#xff1a;小明是蓝桥王国的骑士&#xff0c;他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手&#xff0c;他们的战力值分别为 a1,a2,...,an&#xff0c;且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战&#xff0c;也可以选择避战。 身为高傲的骑士&a…

如何查看window电脑的GPU信息

GPU&#xff08;图形处理器&#xff0c;Graphics Processing Unit&#xff09;和显卡是两个密切相关但不同的概念 概念 1. ‌基本概念‌ ‌GPU‌&#xff1a;是专门用于处理图像和视频信息的微处理器&#xff0c;拥有强大的并行计算能力&#xff0c;主要负责图形渲染、数值分…

26考研——查找_树形查找_二叉排序树(BST)(7)

408答疑 文章目录 三、树形查找二叉排序树&#xff08;BST&#xff09;二叉排序树中结点值之间的关系二叉树形查找二叉排序树的查找过程示例 向二叉排序树中插入结点插入过程示例 构造二叉排序树的过程构造示例 二叉排序树中删除结点的操作情况一&#xff1a;被删除结点是叶结点…

如何在 Postman 中导入和导出 cURL 命令?

cURL 是一款广受欢迎的命令行工具&#xff0c;专门用于执行 HTTP 请求。它在 Web 应用或 API 测试中极为实用&#xff0c;让用户得以借助在 API 开发者社区广为流行的成熟语法&#xff0c;直接通过命令行与 API 进行交互。若你需要在多个环境下运行众多 cURL 命令&#xff0c;可…

用python制作一个贪吃蛇小游戏

文章目录 效果图python源码使用说明效果图 只需要一百多行python代码,就能制作一个贪吃蛇小游戏。效果如下: 操作说明: 你可以使用上下左右箭头键来控制蛇的移动方向。蛇吃到食物后会变长,当蛇撞到墙壁或自己的身体时游戏结束。游戏结束后,你可以按 Q 退出游戏,或按 C…

react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析

一、React 15&#xff08;2016&#xff09; 核心架构&#xff1a;Stack Reconciler&#xff08;栈协调器&#xff09; 工作原理&#xff1a; 同步递归渲染&#xff1a;采用深度优先遍历方式递归处理 Virtual DOM&#xff0c;形成不可中断的调用栈渲染流程&#xff1a;1. 触发 …

微信小程序pdf预览

1.示例图 2.代码 fileId&#xff1a;要预览的pdf文件的id viewsFiles(fileId) {wx.showLoading({title: 加载中...});var params {url: "/common/getFile/" fileId ,//后端提供的接口method: "GET",responseType: "arraybuffer",callBack: …

把手搭建vue前后端管理系统-TAB标签通过pinia来进行管理(二十六)

目标&#xff1a;通过pinia的store来进行组件状态的统一管理&#xff0c;这样大家都可以共用到这个组件的状态信息&#xff0c;就可以实现组件的联动 一、添加侧边栏菜单的点击事件&#xff1a; 1、CommonAside.vue里面添加click的事件 <el-menu-itemv-for"item in …

计算机网络——数据链路层的功能

目录 物理链路 逻辑链路 封装成帧&#xff08;组帧&#xff09; 帧定界 透明传输 SDU 差错控制 可靠传输 流量控制 介质访问控制 主机需要实现第一层到第五层的功能&#xff0c;而路由器这种节点只需要实现第一层到第三层的这些功能 假设左边用户需要给右边用户发送…

数据抓取的缓存策略:减少重复请求与资源消耗

在数据采集领域&#xff0c;爬虫效率是决定项目成败的关键因素之一。传统的爬虫架构往往因请求频繁、资源消耗较大以及重复抓取等问题&#xff0c;导致效率低下。这些问题不仅拖慢了数据获取的速度&#xff0c;还可能引发目标服务器的过载风险&#xff0c;甚至导致爬虫被限制。…

k8s部署argocd

前言 ArgoCD是一个基于Kubernetes的GitOps持续交付工具&#xff0c;应用的部署和更新都可以在Git仓库上同步实现&#xff0c;并自带一个可视化界面。本文介绍如何使用GitHelmArgocd方式来实现在k8s中部署和更新应用服务&#xff1b; 安装Argocd 准备一个k8s集群&#xff0c;然…

【Linux】MAC帧

目录 一、MAC帧 &#xff08;一&#xff09;IP地址和MAC地址 &#xff08;二&#xff09;MAC帧格式 &#xff08;三&#xff09;MTU对IP协议的影响、 &#xff08;四&#xff09;MTU对UDP协议的影响 &#xff08;五&#xff09;MTU对TCP协议的影响 二、以太网协议 &…

【Unity3D】摄像机适配场景以及Canvas适配

目录 宽度不变策略 高度不变策略 宽度不变策略 开发分辨率 750*1334 (宽高比:0.56) 真机分辨率 1170*2532 (宽高比:0.46) 真机宽高比<开发宽高比&#xff0c;采用宽度不变策略 理由&#xff1a;小于代表真机高度比开发高度更大&#xff0c;因此不需要担心高度上…

二叉树的前,中,后序遍历

我们来了解一下二叉树的遍历&#xff0c;话不多说 二叉树的遍历的概念&#xff1a; 二叉树有四种遍历方式&#xff0c;分别为前序遍历&#xff0c;中序遍历&#xff0c;后序遍历和层序遍历&#xff0c;但我们今天谈谈前三种&#xff0c;并实现它 前序遍历&#xff1a; 按照根…

golang Error的一些坑

golang Error的一些坑 golang error的设计可能是被人吐槽最多的golang设计了。 最经典的err!nil只影响代码风格设计&#xff0c;而有一些坑会导致我们的程序发生一些与我们预期不符的问题&#xff0c;开发过程中需要注意。 ​​ errors.Is​判断error是否Wrap不符合预期 ​…