BZOJ4811 睡覺困難症候群

2022-05-12 04:42:16 字數 2832 閱讀 6355

給你乙個有n個點的樹,每個點的包括乙個位運算opt和乙個權值x,位運算有&,l,^三種,分別用1,2,3表示。每次詢問包含三個數x,y,z,初始選定乙個數v。然後v依次經過從x到y的所有節點,每經過乙個點i,v就變成v optixi,所以他想問你,最後到y時,希望得到的值盡可能大,求最大值?給定的初始值v必須是在[0,z]之間。每次修改包含三個數x,y,z,意思是把x點的操作修改為y,數值改為z。

0 <= n , m <= 100000 , k <= 64

應該先做起床困難症候群!!!

同理我們用p0和p1來表示全0和全1經過這個點過後的值。剛好unsigned long long就能開下。

考慮線段樹上這麼合併呢??

形象一點兒,合併其實就是再走過這一段。只不過從左往右走和從右往左走不同,要分別維護。

ans.p0=l.p0&r.p1 or (~l.p0&r.p0)  0出發的點的穿過l變成1再穿過r的結果  或者0出發的點穿過l變成0再穿過r的結果

1也同理,然後記得反著來一遍(先穿r再穿l)

然後坑點就是unsigned long long,最後那個類似起床困難症候群的貪心求答案的時候1一定要強制轉成ull

#include

using

namespace

std;  

#define n 100010

#define lc (p<<1)

#define rc (p<<1|1)

#define mid (t[p].l+t[p].r>>1)

#define ull unsigned long long

intn,m,k,p,idx,cnt;  

intd[n],f[n],id[n],rk[n],top[n],siz[n],son[n],first[n];  

ull op[n][2];  

struct

email  

e[n*4];  

struct

tree  

t[n*4];  

struct

px  

tl[n*4],tr[n*4];  

template

<

class

t>  

void

read(t &x)  

inline

px pushup(px l, px r)  

inline

px change(ull op,ull w)  

inline

void

build(

intp,

intl,

intr)  

intbm=l+r>>1;  

build(lc,l,bm);build(rc,bm+1,r);  

tl[p]=pushup(tl[lc],tl[rc]);tr[p]=pushup(tr[rc],tr[lc]);  

}  inline

void

update(

intp,

intx,ull op,ull w)  

if(x<=mid)update(lc,x,op,w);  

else

update(rc,x,op,w);  

tl[p]=pushup(tl[lc],tl[rc]);tr[p]=pushup(tr[rc],tr[lc]);  

}  px query(int

p,int

ql,int

qr,int

fg)  

inline

void

add(

intu,

intv)  

inline

void

dfs1(

intu,

intfa,

intdep)  

}  inline

void

dfs2(

intu,

intt)  

}  px asktree(int

x,int

y)  

else

}  if(d[x]>=d[y])  

return

pushup(pushup(ans1,query(1,id[y],id[x],1)),ans2);  

else

return

pushup(pushup(ans1,query(1,id[x],id[y],0)),ans2);  

}  void

find(

intx,

inty,ull z)  

intmain()  

dfs1(1,1,1);dfs2(1,1);build(1,1,n);  

while

(m--)  

return

0;  

}  此題調的時候出鍋了,炸了一次

然後在debug下發現是query炸了 從頭到尾看了query好幾遍也不知道為啥炸了 好了重構了 query

重構了就沒炸了 2333 所以有閒心的朋友可以找找不同 是**炸了tat 反正最後看出來了。。其實很明顯 【可能我瞎

還有我強調那個unsinged long long 是因為被教做人了

有一組資料

答案是 18446744073709551615 然而我輸出的 18446744073709551614

唉tat

調這題單循t t 這首歌【沒錯顏文字歌名

放了27次。。還好調了不是太久 27*3.5=94.5 min

感謝收看我的閒聊(fei hua)

Luogu3613 睡覺困難症候群

luogu題面 這道題是noi起床困難綜合症改編而來的 思路是一樣的 這道題我們考慮用lct維護,每個節點維護兩個值 乙個為中序遍歷這棵子樹的ans0,ans1 分別表示0和inf 二進位制下全為1 跑的答案 另乙個為中序遍歷的反向遍歷這棵子樹的ans0,ans1 還要記得儲存這個點的初始操作 考慮...

luogu3613 睡覺困難症候群

題目背景 剛立完flag我就掛了wc和thuwc。時間限制0.5s,空間限制128mb 因為claris大佬幫助一周目由乃通過了deus的題,所以一周目的由乃前往二周目世界找雪輝去了 由於二周目世界被破壞殆盡,所以由乃和雪輝天天都忙著重建世界 其實和mc差不多吧 deus看到了題問她,總是被告知無可...

省隊集訓Day1 睡覺困難症候群

傳送門 題解 按二進位制位分開,對於每一位,用 起床困難症候群 的方法貪心做。寫棵lct,維護正反兩種權值,每個維護2種,代表全0的輸出和全1的輸出。然後直接上lct即可。權值的合併有點trick,可以參考 需要壓位。include include include include include u...