HFUT 1363 木條染色 線段樹 離散化

2022-07-13 04:03:10 字數 2397 閱讀 1985

description

小明是乙個非常浪漫的畫家,他喜歡畫各種奇奇怪怪的畫,雖然沒人理解他畫的究竟是什麼東西。

有一天,他突發奇想,對於一根木條,他每次從木條中選取乙個區間[l,r]進行染色,經過多次染色後,他想知道在[a,b]區間中有幾個未被染色的子區間?

可惜小明雖然畫畫非常厲害,但是並不擅長解決這類問題,於是,他拿著這根木條來找你,希望你能夠給他幫助。

假設木條無限長,所有查詢都在木條長度範圍內,未被染色的子區間是指,木條上染過色的區間的間斷部分。

input

第一行乙個整數t,代表資料組數。

對於每組資料,第一行給出兩個整數n,q,分別代表染色的區間個數,以及查詢個數。

之後n行,每行兩個整數l,r,表示將l到r的區間進行染色,包含l,r兩個節點。

之後q行,每行兩個整數a,b,表示詢問a到b總共有多少未被染色的子區間。

兩組資料之間用乙個空行隔開。

t<20

n<10000

q<100000

0<=l0<=a<=b<1000000

output

對於每次詢問,輸出乙個整數,表示查詢結果。

每組資料之後,請輸出乙個空行。

sample input

2

2 31 2

3 41 3

3 45 5

3 31 5

2 85 6

0 50 9

9 9

sample output

101

121

hint

對於第一組資料,[0,1),(2,3),(4,+)是未染色的子區間,因此查詢[1,3]可以找到(2,3)這個子區間,而對於[3,4]不能找到,對於[5,5]可以找到[5,5]。

對於第二組資料,[0,1)和(8,+)是未染色的子區間,因此對於[0,5]只有子區間[0,1),對於查詢[0,9],有子區間[0,1)和(8,9],對於查詢[9,9],有[9,9]這個子區間。

題解:

題目比較簡單,一般的區間更新+離散化,主要題意很迷,區間[1,1]當做乙個點,[1,2]也當做乙個點,看洋少的寫法換了種離散化的方法結果調bug調半天

**:

1 #include2

using

namespace

std;

3#define inf 0x3f3f3f3f

4#define m(a, b) memset(a, b, sizeof(a))

5#define lson o<<1

6#define rson o<<1|1

7const

int n = 100000 + 5;8

int hash[1000005], val[1000005

], a[n], l[n], r[n], ql, qr, tot, num;910

void build(int o, int l, int

r) 17

18void pushup(int

o) 22

23void pushdown(int

o) 26

27void update(int o, int l, int

r) 31

else38}

3940

int query(int o, int l, int

r) 48

49void gethash(int

n) 56 num = 1;57

for (int i = 0; i <= a[2*n-1]+2; ++i)

58if (hash[i]) num = hash[i] + 1;59

else hash[i] =num; 60}

6162

intmain()

72gethash(n);

73 build(1, 1

, num);

74int

l, r;

75for (int i = 0; i < n; ++i)

79for (int i = 0; i < q; ++i)

85if (t) printf("\n"

);86}87

88return0;

89 }

2016安徽省賽 木條染色 離散化 線段樹

水模板題當時腦袋短路連想都沒想啊!補題的時候居然因為乙個條件打錯超時好幾發,太弱太傻比了 離散化敲了很長時間還是要加油啊 include include include using namespace std define lson i 1 define rson i 1 1 int maxn,t,...

線段樹 離散化 染色

這個題目太坑了,一直給報超時,然後調了一下午發現多開了乙個map。ac include include include include include include include includeusing namespace std define maxn 10000000 100 define...

Foreign 染色 LCT 線段樹

詢問x到根路徑上不同顏色的個數,支援將x到根的路徑上的點全部設為新的顏色。我們將邊兩端的點顏色相同的邊設為實邊,不同的設為虛邊。那麼一次新增顏色的操作顯然就是lct的access操作!access的時候恰是虛邊和實邊的轉換。那麼我們只要用線段樹維護每個點到根的貢獻,結合dfs序來實現子樹加,每次在l...