P1558 色板遊戲 狀壓線段樹

2022-05-20 23:09:51 字數 989 閱讀 1885

題面 洛谷p1558

每次不同顏色覆蓋一段區間,每次詢問一段區間有多少種顏色

因為顏色數\(t\)很小,使用二進位制表示狀態當前區間有那些顏色,二進位制第\(i\)位表示此區間是否含有\(i\)這種顏色,線段樹合併資訊時左右兒子資訊或一下就好了。

scanf讀入char炸了我好久,最後換成cin就ac了

ac code:

#include #define maxn 100010

#define sl (x<<1)

#define sr (x<<1|1)

#define ll long long

using namespace std;

int l,t,o;

inline void m_swap(int &a, int &b)

struct nod tre[maxn*4];

void push_up(int x)

void built(int x, int l, int r)

int mid=(l+r)>>1;

built(sl, l, mid);

built(sr, mid+1, r);

push_up(x);

}void push_down(int x)

void change(int x, int l, int r, ll val)

push_down(x);

int mid=(tre[x].l+tre[x].r)>>1;

if(l<=mid) change(sl, l, r, val);

if(r>mid) change(sr, l, r, val);

push_up(x);

}ll query(int x, int l, int r)

int main()

else

}return 0;

}

P1558 色板遊戲 線段樹

乙個簡單的 或 線段樹.竟然坑了我乙個小時.因為顏色很小,所以把狀態壓起來.然後每個節點上的數值代表當前顏色狀態.然後節點合併很簡單,直接或起來.需要注意一下的地方是修改時的 lazy 要完全覆蓋,這裡不能或.include define ll long long define in x x rea...

P1558 色板遊戲

題目位址 思路 位運算,狀態壓縮,線段樹 分析思路 線段樹code include include define clean x memset x,0,sizeof x define ls rt 2 define rs rt 2 1 const int maxl 100005 maxk 30 uns...

洛谷 P1558 色板遊戲

阿寶上學了,今天老師拿來了一塊很長的塗色板。色板長度為l,l是乙個正整數,所以我們可以均勻地將它劃分成l塊1厘公尺長的小方格。並從左到右標記為1,2,l。現在色板上只有乙個顏色,老師告訴阿寶在色板上只能做兩件事 1.c a b c 指在a到 b 號方格中塗上顏色 c。2.p a b 指老師的提問 a...