日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Count Color poj2777 线段树

發(fā)布時(shí)間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Count Color poj2777 线段树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Count Color poj2777 線段樹

題意

有一個(gè)長(zhǎng)木板,現(xiàn)在往上面在一定區(qū)間內(nèi)刷顏色,后來刷的顏色會(huì)掩蓋掉前面刷的顏色,問每次一定區(qū)間內(nèi)可以看到多少種顏色。

解題思路

這里使用線段樹,因?yàn)樗㈩伾梢钥醋魇菂^(qū)間修改,使用lazy標(biāo)記區(qū)間的顏色種類,下傳標(biāo)記后,當(dāng)前節(jié)點(diǎn)的lazy標(biāo)記就標(biāo)記為0,然后使用vis數(shù)組來標(biāo)記顏色(顏色種類很少)。剩下的基本就是線段樹的模板了。

代碼實(shí)現(xiàn)

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int maxn=1e5+17; struct node{int l, r, lazy; }a[maxn<<2]; int vis[35];//顏色種類 int L, T, O, ans; void build(int rt, int l, int r) {a[rt].l=l;a[rt].r=r;a[rt].lazy=1;//默認(rèn)為第一種顏色if(l==r){return ;}int mid=(l+r)>>1;build(rt<<1, l, mid);build(rt<<1|1, mid+1, r); } void down(int k) {a[k<<1].lazy=a[k].lazy;a[k<<1|1].lazy=a[k].lazy;a[k].lazy=0;//表示他的節(jié)點(diǎn)下面可能是兩種不同的顏色 } void update(int rt, int L, int R, int x) {if(L<=a[rt].l && a[rt].r<=R){a[rt].lazy=x;return ; }int mid=(a[rt].l+a[rt].r)>>1;if(a[rt].lazy !=0 ) //記得一定要下傳標(biāo)記 down(rt); if(L<=mid) update(rt<<1, L, R, x);if(R>mid) update(rt<<1|1, L, R, x); } void query(int rt, int L, int R) {if(a[rt].lazy!=0) //如果不為零就可以進(jìn)行判斷,因?yàn)橄旅娴囊彩沁@種顏色{if(!vis[a[rt].lazy])// 看是否之前標(biāo)記過{ans++; //沒有標(biāo)記就加一vis[a[rt].lazy]=1; //標(biāo)記}return ;}int mid=(a[rt].l+a[rt].r)>>1;if(a[rt].lazy!=0)down(rt);if(L<=mid) query(rt<<1, L, R);if(R>mid) query(rt<<1|1, L, R); } int main() {int l, r, c;char s[4];while(scanf("%d%d%d", &L, &T, &O)!=EOF){build(1, 1, L);for(int i=1; i<=O; i++){scanf("%s", s);if(s[0]=='C'){scanf("%d%d%d", &l, &r, &c);if(l > r){swap(l, r);}update(1, l, r, c);}else {scanf("%d%d", &l, &r);if(l > r) {swap(l, r); }memset(vis, 0, sizeof(vis));ans=0;query(1, l, r);printf("%d\n", ans);}} }return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/alking1001/p/11316507.html

總結(jié)

以上是生活随笔為你收集整理的Count Color poj2777 线段树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。