阿寶上學了,今天老師拿來了一塊很長的塗色板。
色板長度為l,l是乙個正整數,所以我們可以均勻地將它劃分成l塊1厘公尺長的小方格。並從左到右標記為1, 2, ... l。現在色板上只有乙個顏色,老師告訴阿寶在色板上只能做兩件事:1. "c a b c" 指在a到 b 號方格中塗上顏色 c。2. "p a b" 指老師的提問:a到 b號方格中有幾種顏色。學校的顏料盒中一共有 t 種顏料。為簡便起見,我們把他們標記為 1, 2, ... t. 開始時色板上原有的顏色就為1號色。 面對如此複雜的問題,阿寶向你求助,你能幫助他嗎?
輸入格式:
第一行有3個整數 l (1 <= l <= 100000), t (1 <= t <= 30) 和 o (1 <= o <= 100000). 在這裡o表示事件數, 接下來 o 行, 每行以 "c a b c" 或 "p a b" 得形式表示所要做的事情(這裡 a, b, c 為整數, 可能a> b)
輸出格式:
對於老師的提問,做出相應的回答。每行乙個整數。
輸入樣例#1:
2 2 4輸出樣例#1:c 1 1 2
p 1 2
c 2 2 2
p 1 2
21
/*view code可以選擇狀態壓縮,把30種顏色裝換成二進位制,這樣單點修改就行了;
也可以用vis陣列維護,這樣要區間修改,每次查詢更新vis陣列,lz用第二種方法做的。
*/#include
#include
#include
#define lson l,mid,now*2
#define rson mid+1,r,now*2+1
#define m 100010
#define n 32
using
namespace
std;
int sum[m*4],tag[m*4
],vis[n],n,t,m;
void push_up(int
now)
void push_down(int
now)
void change(int x,int y,int v,int l,int r,int
now)
push_down(now);
int mid=(l+r)/2
;
if(x<=mid)change(x,y,v,lson);
if(y>mid)change(x,y,v,rson);
push_up(now);
}void query(int x,int y,int l,int r,int
now)
push_down(now);
int mid=(l+r)/2
;
if(x<=mid)query(x,y,lson);
if(y>mid)query(x,y,rson);
}int
main()
else
}return0;
}
洛谷 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 色板遊戲
阿寶上學了,今天老師拿來了一塊很長的塗色板。色板長度為 l l 是乙個正整數,所以我們可以均勻地將它劃分成 l 塊 1 厘公尺長的小方格。並從左到右標記為 1,2,l 現在色板上只有乙個顏色,老師告訴阿寶在色板上只能做兩件事 c a b c 指在 a 到 b 號方格中塗上顏色 c p a b 指老師...