因為上次在月月面前丟人了,所以華華決定開始學資訊學。十分鐘後,他就開始學樹狀陣列了。這是一道樹狀陣列的入門題:
給定乙個長度為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,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最...