4 21小A模擬賽 T1

2021-09-19 10:19:04 字數 2939 閱讀 1368

description

乙個無限長的01 序列,初始全為0,每次選擇乙個區間[l,r] 進行操作,有三種操作:

• 1 l r 將[l,r] 中所有元素變成1。

• 2 l r 將[l,r] 中所有元素變成0。

• 3 l r 將[l,r] 中所有元素異或上1。

每次操作後詢問最左邊的0 在哪個位置。

input format

第一行乙個數m,表示序列長度和運算元量。

接下來m 行,每行三個數ty l r,描述一次操作。

output format

輸出共m 行,第i 行輸出乙個數表示第i 次操作後的答案。

sample input

31 3 4

3 1 6

2 1 3

sample output13

1對於所有的資料,n<=1018;m<=105。

solution

線段樹線段樹線段樹~

其他細節:

1.乙個lazy陣列來進行標記下傳,計算區間和 (常規操作)

2.思想精華:^1就相當於把這段區間上0變為1,1變為0(後面把它叫做翻轉操作)

我們用flag陣列來傳遞翻轉操作,具體就是:

if

(flag[rt]

)

3.留意一下資料範圍(すごい)

case1:如果修改一段區間[l,r]為0,那麼l有可能是新加進來的最終答案;

case2:如果修改一段區間[l,r]為1,那麼r+1有可能是新加進來的最終答案;

你也許會有的疑問1:為什麼case1中r+1不是呢?因為…看題呀!

你也許會有的疑問2:為什麼case2中l-1不是呢?因為…

l-1不然是第乙個,不然就是一段"1"後的下乙個(也就是說已經被新增進來了)!

so我們就要進行離散化~

也就是只把每次操作的l點和r-1點加進來,

別忘了加「1」哦~(原因見上面的高亮部分)

**如下:

#include

using namespace std;

const

int maxn =

3e5+5;

int up[maxn*4]

,t[maxn*4]

;bool flag[maxn*4]

;long

long a[maxn]

, aa[maxn]

,hash[maxn]

;struct node

op[maxn]

;void

push_down

(int rt,

int l,

int r)

if(flag[rt])}

void

update

(int rt,

int l,

int r,

int x,

int y,

int val)

push_down

(rt,l,r)

;int mid=

(l+r)

>>1;

if(x<=mid)

update

(rt<<

1,l,mid,x,y,val);if

(y>mid)

update

(rt<<1|

1,mid+

1,r,x,y,val)

; t[rt]

=t[rt<<1]

+t[rt<<1|

1];}

void

yihuo

(int rt,

int l,

int r,

int x,

int y)

push_down

(rt,l,r)

;int mid=

(l+r)

>>1;

if(x<=mid)

yihuo

(rt<<

1,l,mid,x,y);if

(y>mid)

yihuo

(rt<<1|

1,mid+

1,r,x,y)

; t[rt]

=t[rt<<1]

+t[rt<<1|

1];}

long

long

query

(long

long rt,

long

long l,

long

long r)

intmain()

a[cnt]

= aa[cnt]

= hash[cnt]=1

;sort

(hash+

1, hash+

1+cnt)

;int d =

unique

(hash+

1, hash+

1+cnt)

-hash-1;

for(

int i =

1; i <= cnt; i++

) aa[i]

=lower_bound

(hash+

1, hash+

1+d, a[i]

)-hash;

for(

int i=

1;i<=d;i++

) up[i]=-

1;for(

int i=

1;i<=m;i++

)}

YCH的模擬賽 T1

括號序列問題,往往就是把左括號看成 1,右括號看成 1,我們只需要保證任意乙個字首大於等於0,且總和為0,就代表是個合法括號序列了。令 f i j 表示當前到第 i 個字元,現在的字首和 j 那麼分三種情況考慮。若第 i 1 個字元是左括號,則能轉移到 f i 1 j 1 若第 i 1 個字元是右括...

11 12 模擬賽T1 加密

有一種不講道理的加密方法是 在字串的任意位置隨機插入字元。相應的,不講道理的解密方法就是從字串中恰好刪去隨機插入的那些字元。給定原文?和加密後的字串?求?有多少子串可以通過解密得到原文?輸入第一行包含乙個字串?第二行包含乙個字串?輸出一行,包含乙個整數,代表可以通過解密得到原文的?的子串的數量。ab...

9 24 模擬賽T1括號序列

問題 述 給定乙個括號求正確使用括號的字串。輸入檔案 輸入檔案包括一行乙個字串,為給定的括號序列。輸出檔案 輸出乙個整數,為標準的括號序列的子串的個數。輸入輸出樣例 4 資料規模和約定 設輸入字串的長度為n。對於30 的資料,滿足n 200 n 200 n 200。對於60 的資料,滿足n 5000...