剛立完flag我就掛了wc和thuwc。。。
時間限制0.5s,空間限制128mb
因為claris大佬幫助一周目由乃通過了deus的題,所以一周目的由乃前往二周目世界找雪輝去了
由於二周目世界被破壞殆盡,所以由乃和雪輝天天都忙著重建世界(其實和mc差不多吧),deus看到了題問她,總是被告知無可奉告
deus沒辦法只能去三周目世界問三周目的由乃oi題。。。
三周目的世界中,因為沒有未來日記,所以一切都很正常,由乃天天認真學習。。。
因為deus天天問由乃oi題,所以由乃去學習了一下oi
由於由乃智商挺高,所以oi學的特別熟練
她在rboi2016中以第一名的成績進入省隊,參加了noi2016獲得了金牌保送
deus:這個題怎麼做呀?
yuno:這個不是noi2014的水題嗎。。。
deus:那如果出到樹上,多組鏈詢問,帶修改呢?
yuno:誒。。。???
deus:這題叫做睡覺困難症候群喲~
雖然由乃oi很好,但是她基本上不會ds,線段樹都只會口胡,比如她noi2016的分數就是100+100+100+0+100+100。。。noip2017的分數是100+0+100+100+0+100
所以她還是只能找你幫她做了。。。
由乃這個問題越想越迷糊,已經達到了廢寢忘食的地步。結果她發現……晚上睡不著了!只能把自己的乙個神經元(我們可以抽象成乙個樹形結構)拿出來,交給deus。
這個神經元是乙個有n個點的樹,每個點的包括乙個位運算opt和乙個權值x,位運算有&,l,^三種,分別用1,2,3表示。
為了**失眠,deus可以將一些神經遞質放在點x上,初始的刺激值是v_0v0 。然後v依次經過從x到y的所有節點,每經過乙個點i,v就變成v opti xi,所以他想問你,最後到y時,希望得到的刺激值盡可能大,所以最大值的v可以是多少呢?當然由於初始的神經遞質的量有限,所以給定的初始值v_0v0 必須是在[0,z]之間。deus每次都會給你3個數,x,y,z。
不過,deus為了提公升**效果,可能會對一些神經節點進行微調。在這種情況下,也會給三個數x,y,z,意思是把x點的操作修改為y,數值改為z
輸入格式:
第一行三個數n,m,k。k的意義是每個點上的數,以及詢問中的數值z都 <2^k<2k 。之後n行,每行兩個數x,y表示該點的位運算編號以及數值
之後n - 1行,每行兩個數x,y表示x和y之間有邊相連
之後m行,每行四個數,q,x,y,z表示這次操作為q(1位詢問,2為更改),x,y,z意義如題所述
輸出格式:
對於每個操作1,輸出到最後可以造成的最大刺激度v
輸入樣例#1:
5 5 3
1 72 6
3 73 6
3 11 2
2 33 4
1 51 1 4 7
1 1 3 5
2 1 1 3
2 3 3 3
1 1 3 2
輸出樣例#1:
7
15
輸入樣例#2:
2 2 2
2 22 2
1 22 2 2 2
1 2 2 2
輸出樣例#2:
3
對於30%的資料,n,m <= 1
對於另外20%的資料,k <= 5
對於另外20%的資料,位運算只會出現一種
對於100%的資料,0 <= n , m <= 100000 , k <= 64
題目是起床困難綜合症的公升級版(症 or 徵?)
採取同樣的貪心策略,如果知道全0或全1跑完一遍運算後的結果,就可以知道最後答案
問題就在於怎麼維護這個全0或全1跑完一遍的結果
這東西要動態修改,又是樹狀的,那就lct吧(樹剖)
首先看一下直接維護我們要的東西可不可以,所以對於乙個節點,維護 \(r0\) ,\(r1\) 分別代表全0跑過這個節點包含的一段運算的結果,以及全1跑完這一段運算的結果
pushup怎麼寫?
\(x_=(\thicksim lc(x)_\&rc(x)_)|(lc(x)_\&rc(x)_)\)
\(x_=(\thicksim lc(x)_\&rc(x)_)|(lc(x)_\&rc(x)_)\)
(當然還要加上自己的權值,但是由於加上自己的有點麻煩,所以只寫了左右的,大概就是這個意思,心領神會就行,加上自己權值的可見**)
什麼意思?
以第乙個式子為例子,\(x_\) 是以全0開始的,那麼左邊的一段肯定是以全0開始的,所以兩個都是 \(lc(x)_\),然後分情況
跑完左邊一段後,有的位置上是0,而有的位置上是1
那麼是0的位置,最後的結果,肯定是用0跑完右邊一段的運算,所以只有跑完左邊一段後值為0的位置才可以留下右邊用全0跑完的結果
而是1的位置,就只能留下右邊用全1跑完的結果
第二個式子類似
又因為題目的位運算是有序的,那麼reverse的時候就行不通了,所以每個節點都還要維護乙個反向運算的結果,reverse的時候正向的和反向的swap一下就好了
然後這個東西,每次詢問就只要拉鍊一下,貪心就可以了
#include#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int maxn=100000+10;
int n,m,k;
struct data;
};#define lc(x) ch[(x)][0]
#define rc(x) ch[(x)][1]
struct lct
inline void reverse(int x)
inline void pushup(int x)
inline void pushdown(int x) }
inline void rotate(int x)
inline void splay(int x)
inline void access(int x)
inline void makeroot(int x)
inline void split(int x,int y)
inline void link(int x,int y) };
lct t;
#undef lc
#undef rc
templateinline void read(t &x)
templateinline void write(t x,char c='\0')
templateinline void chkmin(t &x,t y)
templateinline t min(t x,t y)
int main()
for(register int i=1;i=0;--i)
if(res0&(e
} if(q==2)
}return 0;
}
P3613 睡覺困難症候群(LCT 位運算)
noi2014 起床困難綜合症放在樹上,加上單點修改與鏈上查詢。類似於原題,我們只需要求出 0 和 2 1 走過這條鏈會變成什麼值,就能確定每一位為 0 1 走完後變成什麼值。我們對於 lct 每個節點維護兩個值 r 0,r 1 表示 0 和 2 k 1 從當前 lct 維護的鏈底走到這個點會變成什...
Luogu3613 睡覺困難症候群
luogu題面 這道題是noi起床困難綜合症改編而來的 思路是一樣的 這道題我們考慮用lct維護,每個節點維護兩個值 乙個為中序遍歷這棵子樹的ans0,ans1 分別表示0和inf 二進位制下全為1 跑的答案 另乙個為中序遍歷的反向遍歷這棵子樹的ans0,ans1 還要記得儲存這個點的初始操作 考慮...
luogu3613 睡覺困難症候群
題目背景 剛立完flag我就掛了wc和thuwc。時間限制0.5s,空間限制128mb 因為claris大佬幫助一周目由乃通過了deus的題,所以一周目的由乃前往二周目世界找雪輝去了 由於二周目世界被破壞殆盡,所以由乃和雪輝天天都忙著重建世界 其實和mc差不多吧 deus看到了題問她,總是被告知無可...