Login with GitHub. Nope?
修正 C++ 的程式碼在使用一定量動態記憶體後會產生 RF 的問題 @ 2019/12/6 4:45pm NeoHOJ 強勢復活中 (Open beta)
Submit  Ranklist

Problem : 285 - Hanhan's homework

Problem Statistics

Solved Member: 8  Submission: 45  User Tried: 10

Statement:

對於所有的 $n \ge 0$, 我們可以定義費波那契數列的第 n 項為
$$f_n = \begin{cases} 1 &\text{,if }n \le 1 \\ f_{n-1} + f_{n-2} &\text{,else} \end{cases}$$

瀚瀚現在不太想寫功課,於是他請你來幫他寫!

功課的內容是這樣的:
現在有一個長度為 n 的數列 $a_1,a_2,...,a_n$,他希望寫一個資料結構來維護以下的三種詢問:

1. 給出 x,v ,將 $a_x$ 的值修改為整數 v

2. 給出 l,r ,求出 $\displaystyle f_{0} \times a_{l} + f_{1} \times a_{l+1} + ... + f_{r-l} \times a_{r}$,也就是求出和:
$$\displaystyle \sum^{r - l}_{x = 0}(f_{x} \times a_{l + x})$$

3.給出 l,r,d,將 $a_l, a_{l+1}, ..., a_{r}$ 的值都加上 d

Input:Output:

輸入第 1 行有 2 個整數 n,m,代表數列的長度以及詢問的次數。
第 2 行有 n 個數字,代表 $a_1,a_2,...,a_n$ 的值。

第 3 行開始的後 m 行,每一行最初有一個數字 c,為 1 到 3 之間的整數之一,代表詢問的種類。
若開頭 c=1,則後面會接 x,v 兩整數。
若開頭 c=2,則後面會接 l,r 兩整數。
若開頭 c=3,則後面會接 l,r,d 三個整數。

限制:
1 ≤ n,m ≤ 200000
0 ≤ ai ≤ 100000
0 ≤ v,d ≤ 100000
1 ≤ l ≤ r ≤ n

對其中 30% 的測試資料滿足: n ≤ 100,且 m ≤ 10000
對其中 70% 的測試資料滿足:只有第 1 和第 2 種詢問(c 不為 3)
對於每一筆 c=2 的詢問,請輸出一行包含一個數字,代表所求除以 1000000000(109) 的餘數。

Sample Input:Sample Output:

SAMPLE A:
5 5
1 3 1 2 4
2 1 4
2 1 5
2 2 4
1 3 10
2 1 5

SAMPLE B:
5 4
1 3 1 2 4
3 1 4 1
2 2 4
1 2 10
2 1 5
SAMPLE A:
12
32
8
50

SAMPLE B:
12
45

Source:

ABBYY Cup 3.0

Problem Setter

Testdata:

TestTimeMemoryScore
0-15000ms262144kb
0-25000ms262144kb
15000ms262144kb10
25000ms262144kb10
35000ms262144kb10
45000ms262144kb10
55000ms262144kb10
65000ms262144kb10
75000ms262144kb10
85000ms262144kb10
95000ms262144kb10
105000ms262144kb10