**佇列:
題目傳送門:
這裡介紹一種尺取法。(此處的尺意味游標卡尺)
從左至右依次測量以當前點為右端點的區間「長度」,那麼左端點呢?
能用尺取法做的題必然滿足當右端點不斷往右移的時候,左端點不會往左移。
所以我們每次就去\(check\)一下左端點是否能往右移,如果可以那就不斷地去「卡緊」測量範圍。
對於這個題,用佇列表示卡尺範圍,我們可以開乙個全域性的桶,存每個顏色的彩珠在卡尺範圍內有多少顆。如果左端點的彩珠顏色相同的區間內不止一顆那麼肯定可以把左端點往右邊靠的。然後每次更新最小值即可。
時間複雜度:\(o(n)\)
空間複雜度:\(o(n)\)
**如下:
#include #include using namespace std;
const int maxn=1e6+5;
int sum[65],list[maxn];
int n,head,tail,ans=1e9,cnt,id;
int read()
struct cow
printf("%d\n",ans);
return 0;
}
BZOJ1293 SCOI2009 生日禮物
標籤 單調佇列 description 小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標 即位置 某些座標上可以沒有彩珠,但多個彩珠也可以出現在同乙個位置上。小布生日快到了,於是小西打算剪一段彩帶送給小布。為了讓禮物...
BZOJ 1293 SCOI2009 生日禮物
鏈結 我是鏈結,點我呀 題意 在這裡輸入題意 題解 顯然的滑動視窗題。尺取法 如果l.i這一段已經有k種珍珠了。那麼就嘗試把l 即把l這個影響嘗試去掉一下 如果不足k種珍珠了,那麼就把l 撤銷。否則l 照常 離散化一下資料 include define ll long long define rep...
BZOJ1293 SCOI2009 生日禮物
time limit 10 sec memory limit 162 mb submit 2590 solved 1424 submit status discuss 小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標...