JZOJ4724 斐波那契

2021-07-17 02:24:42 字數 1306 閱讀 7487

定義fi

表示斐波那契數列的第

i 項。

給定乙個長度為

n的序列

a ,和

m個操作。操作有兩種:

data constraint n,

m≤105

引入一種演算法——定期重構

每次的修改操作我們不直接修改而是先將操作存起來,當已經儲存了si

ze(一般取si

ze=n

−−√ )個操作時,再進行修改(重構)。每次查詢,先查詢已經重構的陣列,再遍歷已經儲存的操作,每個操作單獨計算貢獻。

非常好證明,時間複雜度是o(

nn−−

√),運用定期重構可以很好地平衡修改與查詢的時間複雜度。

注意到這題,我們的乙個修改操作[l

,r] 可以做到o(

1),具體來說: 設d

eli 表示第

i 個元素修改後需要加的值,那麼對[l

,r]修改相當於:

這樣一來修改就能做到o(

1)了,但是詢問還是o(

n)的。所以我們可以用到上文提到的定期重構來平衡複雜度。問題完美解決。

時間複雜度:o(

nn−−

√)

#include

#include

#include

#include

#include

#include

using

namespace

std ;

#define n 100000 + 10

typedef

long

long ll ;

const

int mo = 1e9 + 9 ;

struct note

} c[n] ;

int f[n] , s[n] ;

int a[n] , sum[n] , del[n] ;

int n , m , top , size ;

void rebuild()

memset( del , 0 , sizeof(del) ) ;

}int main()

f[1] = f[2] = 1 ;

s[1] = 1 , s[2] = 2 ;

for (int i = 3 ; i <= n ; i ++ )

for (int i = 1 ; i <= m ; i ++ )

} else

printf( "%d\n" , ans ) ;}}

return

0 ;}

以上.

jzoj4724 斐波那契

djl為了避免成為乙隻鹹魚,來找czgj學習fibonacci數列。通過czgj的諄諄教導,djl明白了fibonacci數列是這樣定義的 f 1 1 f 2 1 f n f n 1 f n 2 n 2 czgj深諳熟能生巧的道理,於是他給了djl乙個數列,並安排了如下的訓練計畫 1 1 l r 表...

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...