bzoj
luogu
題意:給你一段01序列,要求支援如下操作:(下面把正常腦區域視為0,腦洞視為1)
1、把一段區間全部改成1.
2、把一段區間全部的0挖出來(然後這個區間也就全部變成了1),把這些0放到另乙個區間上的1位置,原本的0位置不需要再放,如果0不夠就優先放前面。
3、求最大連續1的和。
線段樹基本操作。
維護每個區間的和、最大連續段長度、左邊最大連續段長度、右邊最大連續段長度、是否全是1.
都是基本操作。一遍a
#include#includeusing namespace std;
int gi()
const int n = 2e5+5;
struct datat[n<<2];
data operator + (data a,data b)
int n,m,tag[n<<2],sum;
void build(int x,int l,int r)
void cover(int x,int l,int r,int c)
else }
void pushdown(int x,int l,int r)
}void add(int x,int l,int r,int ql,int qr)
pushdown(x,l,r);int mid=l+r>>1;
if (ql<=mid) add(x<<1,l,mid,ql,qr);
if (qr>mid) add(x<<1|1,mid+1,r,ql,qr);
t[x]=t[x<<1]+t[x<<1|1];
}void del(int x,int l,int r,int ql,int qr)
pushdown(x,l,r);int mid=l+r>>1;
if (ql<=mid) del(x<<1,l,mid,ql,qr);
if (qr>mid) del(x<<1|1,mid+1,r,ql,qr);
t[x]=t[x<<1]+t[x<<1|1];
}data query(int x,int l,int r,int ql,int qr)
int main()
if (opt==1)
if (opt==2)
}return 0;
}
BZOJ4592 Shoi2015 腦洞治療儀
進行 實際上相當於用1覆蓋一段區間,這段區間內原有的1的個數加上挖出來的1的個數等於這段區間的長度,並且這段區間的長度最長為 的區間長度 知道了一段區間的長度,區間裡有多少1,還剩多少腦組織,就能知道這段區間是否被完全覆蓋 需要判斷是否還剩腦組織,如果沒了就返回,要不然複雜度不對 複雜度 o m l...
BZOJ4592 Shoi2015 腦洞治療儀
bzoj4592 吐槽一下ds y 我 這個資料 了一天我xx x!一開始看到這個題。誒,區間連續最大和誒!把腦洞的值為1,正常的賦為 i nf但是操作1怎麼辦。發現就是先統計出l0 到r0 區間內 i nf的個數to t 然後區間賦為1.然後統計l1 到r1 區間內1的個數to t 如果to t ...
BZOJ 4592 Shoi2015 腦洞治療儀
4592 shoi 2015 腦 洞治療儀 4592 shoi2015 腦洞 儀 4592 shoi 2015 腦洞治 療儀description 曾經發明了自動刷題機的發明家shtsc又公開了他的新發明 腦洞 儀 一種可以 他因為發明而日益增大的腦洞的神秘裝置。為了簡單起見,我們將大腦視作乙個01...