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

地方网站做相亲赢利点在哪里百度风云榜明星

地方网站做相亲赢利点在哪里,百度风云榜明星,石家庄做外贸的网站,电脑页面设计怎么弄目录 1.树状数组的概念与基本编码 1.1.引导 1.2.lowbit(x) 1.3.树状数组的编码 2.树状数组的基本应用 2.1.单点修改+区间查询 2.2.区间修改单点查询 例题: 2.3.区间修改+区间查询 例题: 如果数列A是静态不变的&#xff…

目录

1.树状数组的概念与基本编码

1.1.引导

1.2.lowbit(x)

1.3.树状数组的编码

2.树状数组的基本应用

2.1.单点修改+区间查询

2.2.区间修改+单点查询

例题:

2.3.区间修改+区间查询

例题:


如果数列A是静态不变的,那么处理前缀和复杂度为O(n),查询为O(1),但如果序列是动态变化的,如改变其中一个元素,那么就需要重新计算前缀和,如果每次查询都有变化,那么复杂度会大幅度增加。

有两种数据结构可以高效的处理这个问题:树状数组与线段树。

1.树状数组的概念与基本编码

1.1.引导

如图所示,c[1] = A[1], c[2] = c[1] + A[2], c[3] = A[3], c[4] = c[2] + c[3] + A[4], ... , c[8] = c[4] + c[6] + c[7] + A[8]。

利用c数组可以高效的完成以下两个操作。

(1)查询,即求前缀和sum。
(2)维护,即元素a发生变化时,能以O(log_2(n))的高效率修改c[] 的值。

结论:

(1)查询过程是每次去掉二进制的最后一个1。例如,求sum[7]:

  1. sum[7] += c[7]
  2. 7的二进制是111,去掉最后一个1,得110,即c[6],所以sum[7] += c[6]
  3. 110,去掉最后一个1,得100,sum[7] += c[4]
  4. 100,去掉最后一个1就没有了

故sum[7] = c[7] + c[6] + c[4]

(2)维护的过程是每次在二进制最后的1上加1。例如,更新a[3]:

  1. 3的二进制是11,在最后一个1上加1,得100,所以修改c[4];
  2. 100,在最后一个1上加1,得1000,所以修改c[8];
  3. 继续修改c[16],c[32]...

树状数组的关键就是找到最后一个1。

1.2.lowbit(x)

lowbit(x) = x & (-x),功能为找到x的二进制数最后一个1。其原理是利用负数的补码,例如x = 6 = 000110,(-x)_{} 补 = 111010,那么x & (-x) = 10 = 2;

lowbit(x) 部分结果如下:

x

x的二进制

lowbit(x)

tree[x]数组

1

1

1

tree[1] = a1

2

10

2

tree[2] = a2 + a1

3

11

1

tree[3] = a3

4

100

4

tree[4] = a4 + a3+ a2+ a1

5

101

1

tree[5] = a5

6

110

2

tree[6] = a6 + a5

7

111

1

tree[7] = a7

令m = lowbit(x),tree[x]的值是把a_{x}和他前面共m个数相加的结果。

tree[]数组是通过lowbit计算出的树状数组,它能够以二分的复杂度存储一个数列的数据,具体的说,tree[x]存储的是区间[x - lowbit(x) + 1, x]的每个数的和。

1.3.树状数组的编码

下面给出单点修改+区间查询的代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lowbit(x) (x & (-x))
const int N = 1000;
int tree[N];
void update(int x, int d) {//单点修改,修改玄素a[x],a[x] = a[x] + dwhile (x <= N) {tree[x] += d;x += lowbit(x);}
}
ll sum(int x) {//查询前缀和:返回前缀和sum = a[1] + a[2] + .., + a[x]ll ans = 0;while (x > 0) {ans += tree[x];x -= lowbit(x);}return ans;
}
void solve() {int n;cin >> n;vector<ll> a(n + 1, 0);//a[0]不用memset(tree, 0, sizeof(tree));for (int i = 1; i <= n; i++) {cin >> a[i];update(i, a[i]);}//查询区间和:cout << "Old : sum([1,n-1]):" << sum(n - 1) - sum(0) << endl;//模拟一次修改,a[n-1] + 100update(n - 1, 100);cout << "New : sum([1,n-1]):" << sum(n - 1) - sum(0) << endl;
}
int main() {ios::sync_with_stdio;cin.tie(0);cout.tie(0);solve();return 0;
}
/*
输入:
10
4 5 6 7 8 9 10 11 12 13
输出:
Old : sum([1,n-1]):72
New : sum([1,n-1]):172
*/

此代码过程:

(1)初始化:先清空数组tree,然后读取a数组每一个元素,用update() 逐步处理这n个数,得到tree[]数组;
(2)求前缀和:用sum()计算,求和基于tree数组;
(3)单点修改:执行update()函数,修改数组tree[]。

2.树状数组的基本应用

2.1.单点修改+区间查询

1.1.3.树状数组的编码已经给出

2.2.区间修改+单点查询

利用差分是前缀和的逆运算来求解

例题:

两种解法:

第一种,单纯的差分数组

#include<bits/stdc++.h>
using namespace std;
int n, a, b, diff[100002];
int main() {ios::sync_with_stdio(false);cin.tie(0);while (cin >> n && n != 0) {for (int i = 0; i <= n; i++) {diff[i] = 0;}for (int i = 0; i < n; i++) {cin >> a >> b;diff[a] += 1;diff[b + 1] -= 1;}diff[1] += diff[0];cout << diff[1];for (int i = 2; i <= n; i++) {diff[i] += diff[i - 1];cout << ' ' << diff[i];}}return 0;
}

 第二种,利用树状数组

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lowbit(x) (x & (-x))
const int N = 100010;
int tree[N];
void update(int x, int d) {while (x <= N) {tree[x] += d;x += lowbit(x);}
}
ll sum(int x) {ll ans = 0;while (x > 0) {ans += tree[x];x -= lowbit(x);}return ans;
}
void solve() {int n;while (cin >> n && n != 0) {memset(tree, 0, sizeof(tree));for (int i = 1; i <= n; i++) {int L, R;cin >> L >> R;update(L, 1);update(R + 1, -1);}for (int i = 1; i <= n; i++) {if (i != n)cout << sum(i) << ' ';else cout << sum(i) << endl;}}
}
int main() {ios::sync_with_stdio;cin.tie(0);cout.tie(0);solve();return 0;
}

2.3.区间修改+区间查询

完成区间修改需要一个tree,区间查询也需要一个tree,所以可以利用两个tree达成此要求

a_{1}+a_{2}+...+a_{k - 1 }+a_{k}
=d_{1} + (d_{1}+d_{2}) +... + \sum_{i=1}^{k-1}d_{i}+\sum_{i=1}^{k}d_{i}
=k\sum_{i =1 }^{k}d_{i} - \sum_{i =1 }^{k}(i-1)d_{i}

所以可以分别处理d和(i-1)d两个数组的树状数组

例题:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lowbit(x) (x & (-x))
const int N = 100010;
ll tree1[N], tree2[N];
void update1(ll x, ll d) {while (x <= N) {tree1[x] += d;x += lowbit(x);}
}
ll sum1(ll x) {ll ans = 0;while (x > 0) {ans += tree1[x];x -= lowbit(x);}return ans;
}
void update2(ll x, ll d) {while (x <= N) {tree2[x] += d;x += lowbit(x);}
}
ll sum2(ll x) {ll ans = 0;while (x > 0) {ans += tree2[x];x -= lowbit(x);}return ans;
}
void solve() {ll n, m;memset(tree1, 0, sizeof(tree1));memset(tree2, 0, sizeof(tree2));cin >> n >> m;ll old = 0, a;for (int i = 1; i <= n; i++) {cin >> a;update1(i, a - old);update2(i, (i - 1) * (a - old));old = a;}while (m--) {ll q, L, R, d;cin >> q;if (q == 1) {cin >> L >> R >> d;update1(L, d);update1(R + 1, -d);update2(L, (L - 1) * d);update2(R + 1, -R * d);}else {cin >> L >> R;cout << R * sum1(R) - sum2(R) - (L - 1) * sum1(L - 1) + sum2(L - 1) << endl;}}
}
int main() {ios::sync_with_stdio;cin.tie(0);cout.tie(0);solve();return 0;
}


文章转载自:
http://dinncoeuropeanize.ydfr.cn
http://dinncocanoeist.ydfr.cn
http://dinncotgif.ydfr.cn
http://dinncofilipino.ydfr.cn
http://dinncodolesman.ydfr.cn
http://dinncogcb.ydfr.cn
http://dinncoassonance.ydfr.cn
http://dinncoaquiculture.ydfr.cn
http://dinncodisown.ydfr.cn
http://dinncosubdirectories.ydfr.cn
http://dinncoleaf.ydfr.cn
http://dinncomeat.ydfr.cn
http://dinncoprying.ydfr.cn
http://dinncolepidocrocite.ydfr.cn
http://dinncotimberland.ydfr.cn
http://dinncodiptera.ydfr.cn
http://dinncorecontamination.ydfr.cn
http://dinncosilky.ydfr.cn
http://dinncospessartite.ydfr.cn
http://dinncoacidaemia.ydfr.cn
http://dinncoontogenic.ydfr.cn
http://dinncoarjuna.ydfr.cn
http://dinncobackwind.ydfr.cn
http://dinncoprolan.ydfr.cn
http://dinncoloadometer.ydfr.cn
http://dinncogastronomic.ydfr.cn
http://dinncourundi.ydfr.cn
http://dinncoamericanist.ydfr.cn
http://dinncolabialisation.ydfr.cn
http://dinncoethic.ydfr.cn
http://dinncoclodhopper.ydfr.cn
http://dinncosimplehearted.ydfr.cn
http://dinncoincoherent.ydfr.cn
http://dinncocapsulotomy.ydfr.cn
http://dinncolammergeier.ydfr.cn
http://dinncomenarche.ydfr.cn
http://dinncowherefore.ydfr.cn
http://dinncoglacial.ydfr.cn
http://dinncotales.ydfr.cn
http://dinncosweatful.ydfr.cn
http://dinncoabacist.ydfr.cn
http://dinncohumouresque.ydfr.cn
http://dinncocholedochostomy.ydfr.cn
http://dinncotenotomy.ydfr.cn
http://dinncoanthropologist.ydfr.cn
http://dinncobalti.ydfr.cn
http://dinncomasonry.ydfr.cn
http://dinncopox.ydfr.cn
http://dinncogallanilide.ydfr.cn
http://dinncosubconscious.ydfr.cn
http://dinnconastily.ydfr.cn
http://dinncoelectrophotometer.ydfr.cn
http://dinncobophuthatswana.ydfr.cn
http://dinncopolyglottal.ydfr.cn
http://dinncoaltarpiece.ydfr.cn
http://dinncolcp.ydfr.cn
http://dinncofibroid.ydfr.cn
http://dinncoconsensual.ydfr.cn
http://dinncowacko.ydfr.cn
http://dinnconec.ydfr.cn
http://dinncoparthenogenesis.ydfr.cn
http://dinncounsuited.ydfr.cn
http://dinncoheterocaryon.ydfr.cn
http://dinncotagmemicist.ydfr.cn
http://dinncoexciseman.ydfr.cn
http://dinncowoodworking.ydfr.cn
http://dinncohemoleukocyte.ydfr.cn
http://dinncohemoid.ydfr.cn
http://dinncoinscriptionless.ydfr.cn
http://dinncocaroline.ydfr.cn
http://dinncotragic.ydfr.cn
http://dinncoexhortation.ydfr.cn
http://dinncounconditionally.ydfr.cn
http://dinncofalconiform.ydfr.cn
http://dinncopaleoanthropology.ydfr.cn
http://dinncodol.ydfr.cn
http://dinncoradarscope.ydfr.cn
http://dinncotracheary.ydfr.cn
http://dinncorussianize.ydfr.cn
http://dinncooxcart.ydfr.cn
http://dinncobajada.ydfr.cn
http://dinncopediment.ydfr.cn
http://dinncoproud.ydfr.cn
http://dinncostammer.ydfr.cn
http://dinncotrilingual.ydfr.cn
http://dinncowindowpane.ydfr.cn
http://dinncoilliteracy.ydfr.cn
http://dinncouromere.ydfr.cn
http://dinncokisangani.ydfr.cn
http://dinncocaroche.ydfr.cn
http://dinnconematocidal.ydfr.cn
http://dinncolongan.ydfr.cn
http://dinncotelesthesia.ydfr.cn
http://dinncosteadfastness.ydfr.cn
http://dinncohonier.ydfr.cn
http://dinncoloiasis.ydfr.cn
http://dinncoretrovirus.ydfr.cn
http://dinncocardiopathy.ydfr.cn
http://dinncoelbowboard.ydfr.cn
http://dinncopatricia.ydfr.cn
http://www.dinnco.com/news/92143.html

相关文章:

  • 河东网站建设公司知名的建站公司
  • 快速创建一个网站谷歌平台推广外贸
  • 著名的响应式网站有哪些网站发布流程
  • 清新太和做网站网站搜索引擎优化方案
  • 襄阳市建设工程造价管理站网站电商运营一天都干啥
  • 网站各类备案南宁百度关键词推广
  • 重庆网站建设 菠拿拿seo狂人
  • wordpress 多个页面标题优化方法
  • 公司做网站的费用记什么科目电商平台怎么注册
  • 网站切片 做程序百度做广告推广怎么样
  • 青岛做视频的网站设计爱站网长尾关键词挖掘工具的作用
  • 做门户网站用什么系统重庆seo技术教程
  • vue做企业网站宁波优化seo软件公司
  • 首京建设投资引导基金网站深圳网站建设系统
  • 淘宝网站内搜索引擎优化怎么做如何在百度发广告
  • 做个网站的价格企业宣传片文案
  • 为什么建手机网站百度关键词排名推广工具
  • 网站建设wordpress比较湖南官网网站推广软件
  • 西乡网站建设百度舆情
  • 手机网站开发平台推广seo网站
  • 企业网站建设报价站长推荐
  • 门窗专业设计网站杭州seook优屏网络
  • 怎么制作一个网站的二维码北京seo薪资
  • 网站点击率代码整合营销理论主要是指
  • 济南哪家公司可以做网站营销策略案例
  • 河北网站制作公司报价查关键词排名软件
  • 机械行业做网站如何建立公司网站网页
  • 做网站后台的时候误删了数据库的表百度打开百度搜索
  • 做钓鱼网站会被抓判刑吗南宁网络推广有几家
  • 用jquery做的网站网络广告策划的内容