P1558 色板遊戲

2021-09-09 01:37:24 字數 1174 閱讀 5634

題目位址

思路:位運算,狀態壓縮,線段樹

分析思路

線段樹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;

unsigned l , k , o ;

inline unsigned qread ()

return x ;}/*

標頭檔案和準備工作

*/unsigned cnt(unsigned x)

return ans ;}/*

cnt函式可以統計乙個數的二進位制位種所含有的1的個數。

每次進行lowbit運算,都消除了乙個1和它後面的0。

*/unsigned date[maxl * 4] , left[maxl * 4] , right [maxl * 4] , tag[maxl * 4] ;

void plant (unsigned rt , unsigned l , unsigned r)

inline void spd (unsigned rt)

unsigned ask (unsigned rt , unsigned l , unsigned r)

void add (unsigned rt , unsigned l , unsigned r,unsigned k)

unsigned mid = (left[rt] + right[rt] ) >> 1 ;

if (tag[rt] )spd (rt) ;

if (l <= mid) add (ls , l , r , k) ;

if (r > mid) add (rs , l , r , k) ;

date[rt] = date[ls] | date[rs] ;}/*

線段樹的基本函式

*/void swap(unsigned int &x, unsigned int &y)

int main () else

} fclose (stdin) ;

fclose (stdout);

return 0;

}

thanks!

洛谷 P1558 色板遊戲

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

洛谷P1558 色板遊戲

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

P1558 色板遊戲 線段樹

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