昨天想了好久這個題,最後發現竟然已經ac過了,還是寒假ac的!!真是。。。。。。
網上都是些動歸,堆什麼的解法,我是佇列。
按位置排序,依次加入佇列。加入乙個元素後判斷,保證隊首顏色只有一種。
runid
user
problem
result
memory
time
language
code_length
submit_time
346220
lbz007
1293
accepted
15852 kb
3424 ms
pascal/edit
1221 b
2013-02-05 18:33:29
view code
1var2 ss,c,a,q:array[0..1000002]of
longint;
3ans,num,k,n,m,s,x,h,t,i,j:longint;
4procedure
sort(l,r:longint);
5var
i,j,x,y:longint;
6begin
7 i:=l;j:=r;
8 x:=a[(l+r) shr 1];9
repeat
10while a[i]do
11inc(i);
12while xdo
13dec(j);
14if
not(i>j) then
15begin
16 y:=a[i];
17 a[i]:=a[j];
18 a[j]:=y;
19 y:=c[i];
20 c[i]:=c[j];
21 c[j]:=y;
22inc(i);dec(j);
23end;24
until i>j;
25if lthen
26sort(l,j);
27if ithen
28sort(i,r);
29end;30
begin
31readln(n,k);
32for i:=1
to k do
33begin
34read(x);
35for j:=1
to x do
36begin
37inc(s);
38 c[s]:=i;
39read(a[s]);
40end;41
readln;
42end
;43 sort(1
,n);
44 h:=1;t:=1
;45 inc(ss[c[1
]]);
46 num:=1
;47 m:=1
;48 ans:=maxlongint;
49while tdo
50begin
51inc(t);
52inc(ss[c[t]]);
53if (ss[c[t]]=1)and(m<>k) then
inc(m);
54while ss[c[h]]>1
do55
begin
56 inc(h); dec(ss[c[h-1
]]);
57end
;58 num:=a[t]-a[h];
59if (numand(m=k) then
60 ans:=num;
61end;62
writeln(ans);
63end.
1293 SCOI2009 生日禮物
題目鏈結 題目大意 數軸上有若干個彩色的點,求最短區間,使其包含所有顏色的點至少乙個 題解 做法挺多的,例如說堆,二分 我寫的大概是乙個叫尺取法的東西,就是維護兩個指標,表示區間的兩個端點,然後移動 感覺跟莫隊的維護方法差不多 我的收穫 get include include include usi...
1293 SCOI2009 生日禮物
time limit 10 sec memory limit 162 mb submit 3151 solved 1743 submit status discuss 小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標...
BZOJ1293 SCOI2009 生日禮物
標籤 單調佇列 description 小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標 即位置 某些座標上可以沒有彩珠,但多個彩珠也可以出現在同乙個位置上。小布生日快到了,於是小西打算剪一段彩帶送給小布。為了讓禮物...