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 101 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
23243題意:直接看題目描述就可以
思路分析 : 乙個線段樹就可以,用二進位制狀態表示對應的顏色位有沒有氣球
**示例:
#define ll long longconst 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 ...