Luogu P5354 [Ynoi2017]由乃的OJ
题目 这题以前叫睡觉困难综合征。 首先我们需要知道起床困难综合征怎么做。 大概就是先用一个全 \(0\) 和全 \(1\) 的变量跑一遍处理出每一位 \(1\) 和 \(0\) 最后会变成什么。 然后高位贪心:如果当前位能够从 \(0\) 到 \(1\) ,那么直接选上。如果能够从 \(1\) 到 \(0\) ,那么能选就选。 现在我们把它放到了树上。 那么使用LCT或者树剖就可以解决了。 #include<bits/stdc++.h> #define N 100007 #define ull unsigned long long using namespace std; namespace IO { char ibuf[(1<<21)+1],obuf[(1<<21)+1],st[22],*iS,*iT,*oS=obuf,*oT=obuf+(1<<21); char Get() { return (iS==iT? (iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT? EOF:*iS++)):*iS++); } void Flush() { fwrite(obuf,1,oS-obuf,stdout),oS=obuf; } void Put(char x) { *oS++=x; if(oS==oT) Flush(); } ull