題意:
給n,m,k,n長度,k個操作,m種顏色
操作c:輸入a,b,c,區間【a,b】變成c顏色,可能a>b,所以要確保a操作p:輸入a,b,區間【a,b】的顏色種類
思路:因為顏色只有30種,可以用位運算,然後進行lazy標記
#includeusing這道題我wa了乙個晚上,調了乙個晚上,自閉了乙個晚上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,實在是搞不定了,去看了題解。感覺沒差,然後把題解交上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...