時間限制: 1 sec 記憶體限制: 128 mb
提交: 170 解決: 21
[提交][狀態][討論版][edit] [testdata]
現在給你乙個長為n的染色帶,有m種顏色,標號分別為0,1,2,…,m-1,染色帶初始的顏色為標號0,現在對它進行k次操作,第i次操作,是對染色帶的[li,ri]區間染上第si種顏色(即把這段區間原來的顏色給覆蓋掉),最後問你染色帶進行這麼多次操作後染色帶上有幾種顏色。
輸入包含多組資料,每組資料第一行包含3個正整數分別是n,m,k(0輸出對於每組資料輸出乙個數字代表染色帶上最後有幾種顏色。
2 2 02 2 1
0 2 1
3 3 3
0 2 1
1 3 2
2 3 0
113首先吐槽一下題目,第一句,應該是$n+1$長度的吧。。。直接上了個線段樹區間覆蓋,寫完一直$wa$,對拍去了,發現標程是錯的,資料也是錯的。搞笑的是這題是$2014$年學校校賽的題目,當時資料就是錯的,但是現場有人$ac$。。現在我把資料改正確了,歷史翻案。
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
intn,m,k;
int l[100010],r[100010],s[100010
];int p[100010
],sz;
int t[400010],y[100010
];set
r;int
get(int
x)
return
res;}
void pushdown(int
rt)
void update(int ll,int rr,int col,int l,int r,int
rt)
int m = (l+r)/2
; pushdown(rt);
if(ll<=m) update(ll,rr,col,l,m,2*rt);
if(rr>m) update(ll,rr,col,m+1,r,2*rt+1);}
void dfs(int l,int r,int
rt)
int m = (l+r)/2
; pushdown(rt);
dfs(l,m,
2*rt);
dfs(m+1,r,2*rt+1);}
void build(int l,int r,int
rt)
t[rt]=-1
;
int m = (l+r)/2
; build(l,m,
2*rt);
build(m+1,r,2*rt+1);}
intmain()
if(r.count(0)==0) sz++, p[sz]=0 , r.insert(0
);
if(r.count(n)==0) sz++, p[sz]=n , r.insert(n);
sort(p+1,p+1+sz);
build(
1,sz,1
);
for(int i=1;i<=k;i++) l[i] = get(l[i]), r[i] = get
(r[i]);
for(int i=1;i<=k;i++) update(l[i],r[i],s[i],1,sz,1);
dfs(
1,sz,1
);
int ans=0
;
for(int i=0;i<=100000;i++) ans=ans+y[i];
printf(
"%d\n
",ans);
}return0;
}
zufeoj 回文日期
在日常生活中,通過年 月 日這三個要素可以表示出乙個唯一確定的日期。牛牛習慣用8位數字表示乙個日期,其中,前4位代表年份,接下來2位代表月 份,最後2位代表日期。顯然 乙個日期只有一種表示方法,而兩個不同的日期的表 示方法不會相同。牛牛認為,乙個日期是回文的,當且僅當表示這個日期的8位數字是回文的。...
zufeoj 掃雷遊戲
掃雷遊戲是一款十分經典的單機小遊戲。在n行m列的雷區中有一些格仔含有地雷 稱之為地雷格 其他格仔不含地雷 稱之為非地雷格 玩家翻開乙個非地雷格時,該格將會出現乙個數字 提示周圍格仔中有多少個是地雷格。遊戲的目標是在不翻出任何地雷格的條件下,找出所有的非地雷格。現在給出n行m列的雷區中的地雷分布,要求...
zufeoj 移動路線
x桌子上有乙個m行n列的方格矩陣,將每個方格用座標表示,行座標從下到上依次遞增,列座標從左至右依次遞增,左下角方格的座標為 1,1 則右上角方格的座標為 m,n 小明是個調皮的孩子,一天他捉來乙隻螞蟻,不小心把螞蟻的右腳弄傷了,於是螞蟻只能向上或向右移動。小明把這只螞蟻放在左下角的方格中,螞蟻從 左...