牛客23054 華華開始學資訊學 樹狀陣列分塊

2021-10-07 19:52:24 字數 1138 閱讀 5520

因為上次在月月面前丟人了,所以華華決定開始學資訊學。十分鐘後,他就開始學樹狀陣列了。這是一道樹狀陣列的入門題:

給定乙個長度為n的序列a,所有元素初值為0。接下來有m次操作或詢問:

操作:輸入格式:1 d k,將a_d加上k。

詢問:輸入格式:2 l r,詢問區間和,即

華華很快就學會了樹狀陣列並通過了這道題。月月也很喜歡樹狀陣列,於是給華華出了一道高階題:

給定乙個長度為n的序列a,所有元素初值為0。接下來有m次操作或詢問:

操作:輸入格式:1 d k,對於所有滿足1≤i≤n,且i≡0(mod d),將ai加上k。

詢問:輸入格式:2 l r,詢問區間和,即

華華是個newbie,怎麼可能會這樣的題?不過你應該會吧。

第一行兩個正整數n、m表示序列的長度和操作詢問的總次數。 接下來m行每行三個正整數,表示乙個操作或詢問。

對於每個詢問,輸出乙個非負整數表示答案。

直接for(int i=x;i<=n;i+=x)add(i,y);最壞是o(n^m)=1e10,會爆掉

所以需要用個lazy進行分塊統計小於sqrt(n)複雜度較大的那一部分y,

最後在算range_sum(x,y)的時候加上[x,y]中lazy陣列的貢獻

#pragma gcc optimize(2)

#include

#define endl '\n'

#define ll long long

using

namespace std;

ll tree[

100050

],lazy[

100050

],n,m,ans;

ll lowbit

(ll x)

void

add(ll i,ll x)

}ll sum

(ll i)

return res;

}ll range_sum

(ll l,ll r)

intmain()

else

}else

if(f==2)

}return0;

}

牛客 華華開始學資訊學

專題寫到自閉 寫寫牛客放鬆一下 題目思路 兩個基本的線段樹操作 單點修改和區間查詢 但是題目要求每次加值要給在1到n上所有modd等於0都加上 如果直接列舉所有滿足條件的點然後再修改 當d很小的時候 複雜度會很大 直接這樣寫只能過百分八十 所以我們要分成兩類操作 我們以500為界限 大於500 直接...

極客晨星解讀 資訊學奧賽之C 語言

c 是五大學科奧賽之一的資訊奧賽的唯一比賽語言,而獲得資訊奧賽全國三等獎以上者都有資格報名高考自主招生,獲得降分錄取優惠。獲得提高組複賽一等獎的選手即可免試被大學錄取。各位家長請擦亮你們的雙眼看一下 免試,免試,是免試直接被大學錄取哦 作為開啟名校之門的一把密鑰匙,這麼好的乙個良機,怎能錯過?資訊學...

資訊學奧賽一本通 1253 抓住那頭牛(evd)

題目描述 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點n 0 n 100000 牛位於點k 0 k 100000 農夫有兩種移動方式 1 從x移動到x 1或x 1,每次移動花費一分鐘 2 從x移動到2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最...