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