program ricerca;
const MAXN=100002;
Type elenco = array[0.. MAXN-1] of int64;
var N,i, id:Longint;
T : int64;
P :elenco;
Procedure scambia (var a,b: int64);
var x:int64;
begin
x:=a;
a:=b;
b:=x;
end;
Procedure ordinamento (estremoi,estremos: int64; var v : elenco; ordinato:boolean);
var inf, sup, medio:int64;
pivot :int64;
begin
inf:=estremoi;
sup:=estremos;
medio:= (estremoi+estremos) div 2;
pivot:=v[medio];
repeat
if (ordinato) then
begin
while (v[inf]<pivot) do inf:=inf+1;
while (v[sup]>pivot) do sup:=sup-1;
end;
if inf<=sup then
begin
scambia(v[inf],v[sup]);
inf:=inf+1;
sup:=sup-1;
end;
until inf>sup;
if (estremoi<sup) then ordinamento(estremoi,sup,v,ordinato);
if (inf<estremos) then ordinamento(inf,estremos,v,ordinato);
end;
Procedure ricercaUpper (var w:elenco; target:int64); (*ritorna indice del valore maggiore/uguale a target oppure -1 se non esiste*)
var m,start,eend: int64;
begin
start:=0; eend:=N-1 ; m:=-1;
while start<=eend do
begin
m:=(start + eend) div 2;
if w[m]<target then start:=m+1
else if w[m]>=target then begin id:=m; eend:=m-1 end;
end;
if start=N then id:=-1;
end;
begin
readln(N);
readln (T); (*valore da confrontare*)
for i:=0 to N-1 do read(P[i]); readln;
ordinamento(0,N-1,P,true);
for i:=0 to N-1 do write(P[i],' '); writeln;
ricercaUpper(P, T);
if id<>-1 then writeln(id)
else writeln('target non trovato ') ;
end.
cHJvZ3JhbSByaWNlcmNhOyAKY29uc3QgTUFYTj0xMDAwMDI7ClR5cGUgIGVsZW5jbyA9IGFycmF5WzAuLiBNQVhOLTFdIG9mIGludDY0OyAgICAgICAgICAgCiAgICAgICAgICAgIAp2YXIgTixpLCBpZDpMb25naW50OwogICAgVCA6IGludDY0OwogICAgUCA6ZWxlbmNvOyAKICAgIApQcm9jZWR1cmUgc2NhbWJpYSAodmFyIGEsYjogaW50NjQpOwp2YXIgeDppbnQ2NDsKYmVnaW4KICAgeDo9YTsKICAgYTo9YjsKICAgYjo9eDsKZW5kOyAgCgpQcm9jZWR1cmUgb3JkaW5hbWVudG8gKGVzdHJlbW9pLGVzdHJlbW9zOiBpbnQ2NDsgdmFyIHYgOiBlbGVuY287ICBvcmRpbmF0bzpib29sZWFuKTsKdmFyIGluZiwgc3VwLCBtZWRpbzppbnQ2NDsKICAgIHBpdm90IDppbnQ2NDsKYmVnaW4KICAgIGluZjo9ZXN0cmVtb2k7CiAgICBzdXA6PWVzdHJlbW9zOwogICAgbWVkaW86PSAoZXN0cmVtb2krZXN0cmVtb3MpIGRpdiAyOwogICAgcGl2b3Q6PXZbbWVkaW9dOwogICAgcmVwZWF0CiAgICAgIGlmIChvcmRpbmF0bykgdGhlbgogICAgICAgICBiZWdpbgogICAgICAgICAgICB3aGlsZSAodltpbmZdPHBpdm90KSBkbyAgaW5mOj1pbmYrMTsKICAgICAgICAgICAgd2hpbGUgKHZbc3VwXT5waXZvdCkgZG8gIHN1cDo9c3VwLTE7CiAgICAgICAgIGVuZDsKICAgICAgaWYgaW5mPD1zdXAgdGhlbgogICAgICAgYmVnaW4KICAgICAgICAgc2NhbWJpYSh2W2luZl0sdltzdXBdKTsKICAgICAgICAgaW5mOj1pbmYrMTsKICAgICAgICAgc3VwOj1zdXAtMTsKICAgICAgIGVuZDsKICAgIHVudGlsIGluZj5zdXA7CiAgICBpZiAoZXN0cmVtb2k8c3VwKSB0aGVuIG9yZGluYW1lbnRvKGVzdHJlbW9pLHN1cCx2LG9yZGluYXRvKTsKICAgIGlmIChpbmY8ZXN0cmVtb3MpIHRoZW4gb3JkaW5hbWVudG8oaW5mLGVzdHJlbW9zLHYsb3JkaW5hdG8pOwplbmQ7ClByb2NlZHVyZSByaWNlcmNhVXBwZXIgKHZhciB3OmVsZW5jbzsgdGFyZ2V0OmludDY0KTsgKCpyaXRvcm5hIGluZGljZSBkZWwgdmFsb3JlIG1hZ2dpb3JlL3VndWFsZSBhIHRhcmdldCBvcHB1cmUgLTEgc2Ugbm9uIGVzaXN0ZSopCiAgdmFyIG0sc3RhcnQsZWVuZDogaW50NjQ7CiAgICAgIAogYmVnaW4gIAogICBzdGFydDo9MDsgZWVuZDo9Ti0xIDsgbTo9LTE7CiAgIHdoaWxlIHN0YXJ0PD1lZW5kIGRvCiAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgbTo9KHN0YXJ0ICsgZWVuZCkgZGl2IDI7CiAgICAgICAgICAgICAgICAgIGlmIHdbbV08dGFyZ2V0IHRoZW4gIHN0YXJ0Oj1tKzEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgaWYgd1ttXT49dGFyZ2V0IHRoZW4gIGJlZ2luIGlkOj1tOyAgZWVuZDo9bS0xIGVuZDsKICAgICAgICAgICBlbmQ7CiAgIGlmIHN0YXJ0PU4gdGhlbiBpZDo9LTE7CiBlbmQ7CgpiZWdpbgogICByZWFkbG4oTik7CiAgIHJlYWRsbiAoVCk7ICgqdmFsb3JlIGRhIGNvbmZyb250YXJlKikKICAgZm9yIGk6PTAgdG8gTi0xIGRvIHJlYWQoUFtpXSk7IHJlYWRsbjsKICAgb3JkaW5hbWVudG8oMCxOLTEsUCx0cnVlKTsKICAgZm9yIGk6PTAgdG8gTi0xIGRvIHdyaXRlKFBbaV0sJyAnKTsgd3JpdGVsbjsKICAgcmljZXJjYVVwcGVyKFAsIFQpOwogICBpZiBpZDw+LTEgdGhlbiAgd3JpdGVsbihpZCkKICAgICAgICAgICAgIGVsc2UgIHdyaXRlbG4oJ3RhcmdldCBub24gdHJvdmF0byAgJykgOwplbmQu