BZOJ4592 SHOI2015 腦洞治療儀

2022-04-29 01:12:07 字數 1172 閱讀 9369

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...