BZOJ4592 Shoi2015 腦洞治療儀

2021-08-02 09:35:52 字數 1737 閱讀 5688

bzoj4592

(吐槽一下ds

y ,我=這個資料=了一天我xx

x!! )

一開始看到這個題。誒,區間連續最大和誒!把腦洞的值為1,正常的賦為−i

nf但是操作1怎麼辦。。

發現就是先統計出l0

到r0 區間內−i

nf的個數to

t ,然後區間賦為1.

然後統計l1

到r1 區間內1的個數to

t ,如果to

t>to

t 就直接區間賦值了嘛。

其他情況就在l1

到r1 內二分一下然後區間賦值。

複雜度o(n

log2

n)打得輕鬆加愉快!wo

ri怎麼t了!lz

明明最極限的資料都2s

卡過去了,ex

m!!?

然後就是dt

的=資料時間。。

測出來還是

t 了一組qa

q,媽蛋被卡常了qn

q 。哎兩個lo

g 線段樹還打得醜沒得法。。

發現這個題區間最大連續和比較特殊。。只可能兩個值。。改了一下寫法卡卡常數終於18s

混過去了。

#include 

#include

#include

#include

#include

#include

#define n 200005

#define mod 1000000007

#define inf 200001

using

namespace

std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const ull base=31;

ll read()

while(isdigit(ch))

return x*f;

}int n,m;

class seg_treee[n<<2];

void build(int p,int l,int r)

void pushup(seg_tree &p,seg_tree l,seg_tree r)

void pushdown(int k)

void update(int p,int x,int y,int z)

if(e[p].tag) pushdown(p);

if(y<=mid) update(p<<1,x,y,z);

else

if(x>mid) update(p<<1|1,x,y,z);

else update(p<<1,x,mid,z),update(p<<1|1,mid+1,y,z);

pushup(e[p],e[p<<1],e[p<<1|1]);

}void solve1()

int find1(int p,int x,int y)

int find_pos(int l,int r,int x)

return rtn;

}void solve2()

seg_tree query(int p,int x,int y)

void solve3()

int main()

return0;}



BZOJ4592 Shoi2015 腦洞治療儀

進行 實際上相當於用1覆蓋一段區間,這段區間內原有的1的個數加上挖出來的1的個數等於這段區間的長度,並且這段區間的長度最長為 的區間長度 知道了一段區間的長度,區間裡有多少1,還剩多少腦組織,就能知道這段區間是否被完全覆蓋 需要判斷是否還剩腦組織,如果沒了就返回,要不然複雜度不對 複雜度 o m l...

BZOJ 4592 Shoi2015 腦洞治療儀

4592 shoi 2015 腦 洞治療儀 4592 shoi2015 腦洞 儀 4592 shoi 2015 腦洞治 療儀description 曾經發明了自動刷題機的發明家shtsc又公開了他的新發明 腦洞 儀 一種可以 他因為發明而日益增大的腦洞的神秘裝置。為了簡單起見,我們將大腦視作乙個01...

BZOJ4592 Shoi2015 腦洞治療儀

bzoj4592 shoi2015 腦洞 儀 曾經發明了自動刷題機的發明家shtsc又公開了他的新發明 腦洞 儀 一種可以 他因為發明而日益增大的腦洞的神秘裝置。為了簡單起見,我們將大腦視作乙個01序列。1代表這個位置的腦組織正常工作,0代表這是一塊腦洞。腦洞 儀修補某一塊腦洞的基本工作原理就是將另...