集訓第十六天(2017 8 15) 樹狀陣列

2021-08-06 06:33:06 字數 951 閱讀 2530

今天二分法和單調佇列暫時告一段落,樹狀陣列專題又開始了,上午看了一下徐華傑的樹狀陣列,基本原理看明白了,下午做了練習賽,發現了一道思路讓人耳目一新並且程式實現也很巧妙的一道題knights of ni,專門寫了一篇解題報告,有興趣可以看一下。

接下來的重心就是樹狀陣列了,據說很難,首先看一下基本的模板:

分清a csum 他們各自所代表的意思;

a就是輸入的陣列;

c就是建立的樹狀陣列;

c[i] = a[i - lowbit(i)+1] + ...... + a[i];

a有多少個c就有多少個,而且c[i]肯定包含相應的a[i];

lowbit(i) =i&(-i)(這是根據樹狀陣列的特性推導出的公式)

sum[k] = c[n1] + c[n2] + c[n3].......+c[nm];

ni-1 = ni - lowbit(i);

求和的話,就是有c[nm]  c[nm-1] c[nm-2] .... c[n1]的過程ni - lowbit(i)的過程是將ni的二進位制的最右邊的1去掉的過程,所以求和的時間複雜度為o(log(k));

而更新也是如果a[i]更新了那麼c[n1] c[n2] ..... c[nm]也要更新n1= i; 就是從c[n1] c[n2] ... c[nm]的過程ni = ni-1 + lowbit(i);就是在ni - 1的二進位制最右邊1後邊填1的過程,就是在時間複雜度也是o(log(n))級別。

適用於:單點更新,區間求和;

lowbite操作:

int lowbit(int x)

modify操作單點的更新

void modify(int pos,int sc)//位置pos更新sc

} getsum操作區間求和

int getsum(int pos)

return sum; }

更深的內容我就有些難懂了,明天再看吧~~~

Python 第十六天

魔法方法總是被雙下劃線包圍 例如 init 注 魔法方法第乙個引數為cls 類方法 或者self 例項方法 其中 cls 代表乙個類名稱 self 代表乙個例項物件的名稱 基本方法 init self 構造器,當乙個例項被建立的時候呼叫的初始化方法 new cls 是在乙個物件例項化的時候所呼叫的第...

寒假第十六天

abs x 返回數字的絕對值,如abs 10 返回 10 ceil x 返回數字的上入整數,如math.ceil 4.1 返回 5 cmp x,y 如果 x y 返回 1,如果 x y 返回 0,如果 x y 返回 1 exp x 返回e的x次冪 ex 如math.exp 1 返回2.7182818...

python第十六天

一 包 1 什麼是包?一系列模組的集合 2 有什麼用?包通過資料夾來管理一系列功能相近的模組 3 包重點?包中一定有乙個專門用來管理包中所有模組的檔案 init 4 什麼是包名?包名是存放一系列模組的資料夾名字 5 包名有什麼用 包名 包物件 存放的是管理模組的那個檔案的位址,指向其全域性命名空間。...