牛客練習賽49 筱瑪愛線段樹 思維

2021-09-25 01:27:06 字數 1126 閱讀 3175

太久沒做題了,看著有牛客就打了一場,果然自閉…

題目大意也很明確,給定乙個長度為n,初始全為0的樹組。給定以下兩種操作:

思維退化太快。開始老是想著建乙個可持久化的,或者怎瞎搞,發現複雜度都降不下來。後來絕處逢生,想到了將所有的操作倒著做,記錄每乙個操作被後面的操作總共引用了多少次,完美解決。複雜度也能過。

最絕望的來了,由於太久沒寫題,導致樹狀樹組的意義都忘了,一邊吃飯一邊調樹狀樹組,調了乙個小時左右,終於調過了樣例。然後馬上交了一發,果不其然的wa了。此時距離比賽結束還有十幾分鐘,最後果不其然的涼了。

最後wa的地方對於當時的我來說可能確實有點難看出來(但是樣例卻神奇的過了),第二天對著別人的**debug才發現**出了錯(在下方的**中標註了)…

#include

using

namespace std;

const

int n=

1e5+5;

const

int mod=

1e9+7;

int tr[n]

,p[n]

;inline

intlowbit

(int x)

void

add(

int*tr,

int x,

int d)

intquery

(int

*tr,

int x)

int opt[n]

,l[n]

,r[n]

;int

main()

for(

int i=

1;i<=m;i++

)for

(int i=m;i>=

1;i--

)else

/* 開始的寫法:

if(opt[i]==1)

else

這樣顯然是不行的,因為前面在更新的時候會改變當前tr[i]的值

*/}for

(int i=

1;i<=n;i++

)return0;

}

複雜度顯然只有o(n

logn

)o(nlogn)

o(nlog

n)

牛客練習賽49 D 筱瑪愛線段樹 差分

給定乙個長度為n n 1e5 的陣列a,剛開始每一項的值均為0。支援以下兩種操作,操作共m m 1e5 次 1 l r 將al ar的每一項的值加上1。2 l r 執行操作編號在 l,r 內的所有操作各一次,保證r小於當前操作的編號。m次操作結束後,你要告訴馬爺a陣列變成什麼樣子了。由於答案可能會很...

牛客練習賽49 筱瑪愛閱讀 子集dp 桶判斷

筱瑪愛閱讀 題是好題,但我不會 定義d p i dp i dp i 為取出書狀態為i ii時的最大免費值 但是每本書的 是自己選定的,無法dpdp dp但是仔細觀察發現每本書並無區別 只會在最終方案存在一次 所以我們考慮dp i dp i dp i 會怎樣被更新 c nt i cnt i cnt i...

牛客練習賽49 solution

水題 有15本書,和15個 你要分配這15個 使得總價最小.此外,有一些 方案,每個方案是一些書的集合,表示只要買全了這個方案的書,則最便宜的一本書免費 你最後選擇的所有方案不能有重複的書.第一感覺就是狀壓dp 了 首先二進位制列舉子集,對於每個當前狀態,考慮可以從哪些狀態轉移過來,這時候再列舉他的...