1. 程式人生 > >Mushroom的區間 題解

Mushroom的區間 題解

Mushroom的區間
【題目描述】
Mushroom有一行數,初始時全部是0。現在Mushroom有m個區間[L,R],他希望用以下操作得到新的序列。
從m個給定區間中選擇一個區間[s,t],把區間中的數對應元素全部翻轉。(0變1,1變0)
請告訴Mushroom他能得到多少區間。(模10^9+7)
【輸入格式】
第一行包含兩個整數n,m。表示n個數和m個區間。
接下來m行是所表示的區間。
【輸出格式】
一個整數,表示能得到的區間數。
【樣例輸入】
3 3
1 1
2 2
3 3
【樣例輸出】
8
【資料範圍】
對於30%的資料,n,m<=20
對於60%的資料,n,m<=100
對於100%的資料,n,m<=100000
【樣例解釋】

每個位置都可以單個修改,所以有8種可能。

這題有毒。chu de hao lan

首先這題暴力跑可以30%,位運算跑60%

我們發現他就是一些區間數x,答案就是2^x

然後就是求要去哪些區間

於是我用了個很迷的演算法,我們找一個和N一樣長的區間,我們將輸入的區間已從小到大的方式方式對他染色,已染過的部分不染

我們發現當資料為類似(1,2)(2,3)(1,3)是無法解決

於是我們在對有重複部分的染色時可以遵守以下規則:

1.當該區域只有空白部分時染色

2.當該區域既有染色區又有空白區時去色

3.當該區間只有染色區時判斷是否剛好框住一個區間,若是則不管,不是則去色

但是我們發現當他單色塊消除後就會變小,於是我們將以完全去色的區間數記錄

答案就為記錄的2的去色區間數加染色數次方

然而標答是一個用巧的不行的並查集去求區域數