題面 洛谷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...