Pagini recente » Cod sursa (job #2980579) | Cod sursa (job #2482602) | Cod sursa (job #2868095) | Cod sursa (job #3245857) | Cod sursa (job #10615)
Cod sursa(job #10615)
var a, nr1, nr2:array[0..1 shl 20] of longint;
val:array[0..1 shl 20] of qword;
i,k,n,m,p,u:longword;
sol:qword;
procedure sort(l,r: longint);
var i,j:longint;
x,y:qword;
begin
i:=l; j:=r;
x:=val[(l+r) div 2];
repeat
while val[i]<x do inc(i);
while x<val[j] do dec(j);
if (i<=j) then
begin
y:=val[i]; val[i]:=val[j]; val[j]:=y;
inc(i); dec(j);
end;
until i>j;
if (l<j) then sort(l,j);
if (i<r) then sort(i,r);
end;
procedure solve; inline;
var dif1, dif2, p1, p2:longword;
begin
dif1:=0; dif2:=0;
p1:=0; p2:=0;
for i:=1 to n do
begin
if i>1 then
begin
dec(nr1[a[i-1]]);
if (nr1[a[i-1]]=0) then dec(dif1);
dec(nr2[a[i-1]]);
if (nr2[a[i-1]]=0) then dec(dif2);
end;
while (dif1<p) and (p1<n) do
begin
inc(p1);
if (nr1[a[p1]]=0) then inc(dif1);
inc(nr1[a[p1]]);
end;
while (p2<n) and ((dif2<u) or (nr2[a[p2+1]]>0)) do
begin
inc(p2);
if (nr2[a[p2]]=0) then inc(dif2);
inc(nr2[a[p2]]);
end;
if (dif1=p) then inc(sol, p2-p1+1);
end;
writeln(sol);
end;
begin
assign(input,'secv5.in'); reset(input);
assign(output,'secv5.out'); rewrite(output);
readln(n, p, u);
for i:=1 to n do
begin
read(k);
val[i]:=qword(k) shl 22+i;
end;
sort(1,n); m:=0;
for i:=1 to n do
begin
if (val[i-1] shr 22 <> val[i] shr 22) then inc(m);
a[val[i] mod (1 shl 22)]:=m;
end;
solve;
close(output);
end.