P1558 色板遊戲 線段樹(區間修改,區間查詢)

2022-05-06 21:24:10 字數 1738 閱讀 3277

題意:

給n,m,k,n長度,k個操作,m種顏色

操作c:輸入a,b,c,區間【a,b】變成c顏色,可能a>b,所以要確保a操作p:輸入a,b,區間【a,b】的顏色種類

思路:因為顏色只有30種,可以用位運算,然後進行lazy標記

#includeusing

namespace

std;

#define ll long long

#define il inline

#define it register int

#define inf 0x3f3f3f3f

#define lowbit(x) (x)&(-x)

#define mem(a,b) memset(a,b,sizeof(a))

#define mod 998244353

const

int maxn=1e6+10

;int

n,m,k;

inttree[maxn],lazy[maxn];

il void pushdown(intx)}

il void pushup(int

x)void build(int x,int l,int

r)

int mid=(l+r)>>1

; build(x

<<1

,l,mid);

build(x

<<1|1,mid+1

,r);

pushup(x);

}void update(int x,int l,int r,int l1,int r1,int

zhi)

pushdown(x);

int mid=(l+r)>>1

;

if(l1<=mid)

if(r1>mid)

pushup(x);

}int query(int x,int l,int r,int l1,int

r1) pushdown(x);

int temp=0

;

int mid=(l+r)>>1

;

if(l1<=mid)

if(r1>mid)

return

temp;

}int

main()

update(

1,1,n,a,b,c);

}else

int sum=query(1,1,n,a,b),ans=0

;

for(it j=0;j)

}printf(

"%d\n

",ans);}}

return0;

}

這道題我wa了乙個晚上,調了乙個晚上,自閉了乙個晚上

第二天早上,重寫還是wa,實在是搞不定了,去看了題解。感覺沒差,然後把題解交上ac????

然後照著題解寫了一邊又wa,???最後在討論區瞧見了乙個解釋……

我舉報這題坑爹。不過讓我漲了%c %s getchar()的認知

這題用getchar();scanf("%c",&c);就是wa到死

換成scanf(" %c",&c);或者scanf("%s",&c);就ac

從未考慮這一塊的我理所當然的用了getchar();還拼命找錯,記住了

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 色板遊戲 狀壓線段樹

題面 洛谷p1558 每次不同顏色覆蓋一段區間,每次詢問一段區間有多少種顏色 因為顏色數 t 很小,使用二進位制表示狀態當前區間有那些顏色,二進位制第 i 位表示此區間是否含有 i 這種顏色,線段樹合併資訊時左右兒子資訊或一下就好了。scanf讀入char炸了我好久,最後換成cin就ac了 ac c...