bzoj1858 Scoi2010 序列操作

2021-07-16 18:00:50 字數 834 閱讀 9828

bzoj1858: [scoi2010]序列操作

一道裸線段樹。的確是比較好想,然而**寫得莫名醜,於是調了很長時間。

題解

維護區間中1的總數,左起連續1的個數,右起連續1的個數,最大連續1的個數,0同理。更新的時候左起連續1(0)要考慮左區間全為1(0)延伸到右區間的情況,右起同理。最大連續考慮左區間的右連續+右區間的左連續情況。標記打區間填充和取反。

**
#include

#include

#define mxn 100010

using

namespace

std;

int op,x,y,n,m;

bool a[mxn];

struct node

b[mxn<<2];

void update(int k)

b[k].laz=-1;

}void pushdown(int k);

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

}void mdf(int k,int l,int r,bool v)

else

}void rev(int k,int l,int r)

else

}void pushdown(int k)

int qsum(int k,int l,int r)

}int qmax(int k,int l,int r)

}}int main()

}

bzoj1858SCOI 序列操作 (線段樹)

題目大意 給定乙個長度為n的01序列為,現在有m種操作 0a b 0ab 把 a,b a,b 的數全部修改為0 1a b 1ab 把 a,b a,b 的數全部修改為1 2a b 2ab 把 a,b a,b 的所有數取反,就是0 1 1 0 3a b 3ab 詢問 a b a,b 中一共有多少個0 4...

bzoj1858SCOI 序列操作 (線段樹)

題目大意 給定乙個長度為n的01序列為,現在有m種操作 0 a b 把 a,b 的數全部修改為0 1 a b 把 a,b 的數全部修改為1 2 a b 把 a,b 的所有數取反,就是0 1 1 0 3 a b 詢問 a,b 中一共有多少個0 4 a b 詢問 a,b 中最長有多少個連續的1 其中 n...

BZOJ1858 Scoi2010 序列操作

description lxhgww最近收到了乙個01序列,序列裡面包含了n個數,這些數要麼是0,要麼是1,現在對於這個序列有五種變換操作和詢問操作 0 a b 把 a,b 區間內的所有數全變成0 1 a b 把 a,b 區間內的所有數全變成1 2 a b 把 a,b 區間內的所有數全部取反,也就是...