線段樹 狀態壓縮

2022-06-27 05:09:08 字數 1301 閱讀 9560

n個桶按順序排列,我們用1~n給桶標號。有兩種操作:

1 l r c 區間[l,r]中的每個桶中都放入乙個顏色為c的球 (1≤l,r ≤n,l≤r,0≤c≤60)

2 l r   查詢區間[l,r]的桶中有多少種不同顏色的球     (1≤l,r ≤n,l≤r)

有多組資料,對於每組資料:

第一行有兩個整數n,m(1≤n,m≤100000)

接下來m行,代表m個操作,格式如題目所示。

對於每個2號操作,輸出乙個整數,表示查詢的結果。
示例1

10 10

1 1 2 0

1 3 4 1

2 1 4

1 5 6 2

2 1 6

1 7 8 1

2 3 8

1 8 10 3

2 1 10

2 3 8

232

43題意:直接看題目描述就可以

思路分析 : 乙個線段樹就可以,用二進位制狀態表示對應的顏色位有沒有氣球

**示例:

#define ll long long

const ll maxn = 1e5+5;

const ll mod = 1e9+7;

const double eps = 1e-9;

const double pi = acos(-1.0);

const ll inf = 0x3f3f3f3f;

#define lson k<<1

#define rson k<<1|1

ll n, m;

struct node

t[maxn<<2];

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

void pushdown(ll k)

void pushup(ll k)

void update(ll l, ll r, ll c, ll k)

ll ans;

void query(ll l, ll r, ll k)

if (t[k].f) pushdown(k);

ll m = (t[k].l + t[k].r)>>1;

if (l <= m) query(l, r, lson);

if (r > m) query(l, r, rson);}

ll fun()

return cnt;

}ll pt, l, r, c;

int main()

else } }

return 0;

}

poj2777線段樹,狀態壓縮

題意 就是一堆石頭,開始全是一種顏色 之後叫你染色,顏色不超過30種 染色的規則是一段一段染 叫你求某一段區間的顏色種數 理解 這題一看就是線段樹 主要就是記錄顏色的問題 開始我以為是線段樹區間合併的問題 結果經過師兄師姐的薰陶 發現果然是狀態壓縮 就是用數字記錄顏色的種數 因為不超過30種,所以用...

線段樹(狀態壓縮二進位制)

題意 給出n 1e5 的長度的木棒,初始的顏色都為1,給出顏色種類t 1 t 30 給出q 1e5 個操作,c l r x 將l到r內的所有顏色更改為x p l r 問在l到r內有多少種顏色。解法 觀察發現顏色種類不多,將顏色轉為二進位制,每一位代表一種顏色,1表示有改顏色。用線段樹儲存下當前的每一...

Poj2777(線段樹 標記 狀態壓縮)

題目鏈結 題目大意 給你乙個長為l的板,然後給上邊的每一段塗顏色,給出一系列操作對應更新區間或輸出該區間有多少中顏色,本題肯定能想到線段樹來解決,然後根據t 30想到用狀態 壓縮的方法,用位運算同時也要加上lazy標記,不然很容 易超時。注意異或 的用法 x 1 k 1 0 表示x的第k位 從 k ...