洛谷 U18791 約冪數(線段樹 二進位制分解)

2021-08-14 23:27:25 字數 1361 閱讀 7600

無法傳送門

題目大意就是給出乙個區間[l,r],對於區間裡的每個x,如果[1,n]中有乙個y,使得y=(x

<<

k)+c,其中c比(1

<<

k)小,那麼a[y]+=d。給出a序列和每次修改的區間[l,r],每次問你a中某個數的值。

作為某場gdkoi膜泥賽的t1,這道題是很水的。然而一開始我想了一些亂七八糟的東西。

下面簡要證明一下y是x的二進位制字首:

充分性:y左移了k位,剩下的c一定在後面的0裡出現,所以肯定小於最後那個1的權。

必要性:假如y不是x的字首,那麼若x-y得到的數所有的1都在x的最後乙個1的右邊,那麼加起來必然不等於x,那麼c必然有1出現在y的最後乙個1左邊(或覆蓋最後乙個1),於是不滿足條件。

於是本題愉快解決。

ps:聽說也有直接列舉k的做法,不過下標會爆int什麼的。。。

小舟從此逝 江海寄餘生

洛谷U3981 語文 DFS序 線段樹

題目大意 對於乙個有根樹有n個結點,每個結點上都有權值。一共有q次操作,分別為以下兩種 1.將以結點i為根的子樹除i之外的點的重要度增加delta 2.詢問當前點重要度。資料範圍 n 5 10 5,q 10 6,delta 10 3 對於30 的資料n 500,q 1000.對於30 的資料,直接模...

洛谷1083(差分 二分 or 線段樹)

第一種方法 可以二分最大天數訂單的答案然後通過差分求一下是否可行。1 const int maxn 1e6 5 2 intn,m,a maxn ans 3struct section b maxn 6int c maxn sum maxn 78 inline bool ok int now 15 r...

洛谷P2894 Hotel 線段樹 二分查詢

題目大意 給定乙個長度為 n 的序列,每個點有兩種狀態 1 0,表示占有和空閒,現支援 first fit 查詢是否有一段連續的長度為 x 的空閒子串行和區間賦值操作。如下 include using namespace std const int maxn 5e4 10 int n,m,opt s...