題目位址
思路:位運算,狀態壓縮,線段樹
分析思路
線段樹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...