1
1
 12
55
75
1
98
63
64
9
39
82
18
47
9
 7
1
2
4
8
16
32
64
 4
1
1
1
2
 5
1
2
4
8
16
 100
678
771
96
282
135
749
168
668
17
658
979
446
998
331
606
756
37
515
538
205
647
547
904
842
647
286
774
414
267
791
595
465
8
327
855
174
339
946
184
250
807
422
679
980
64
530
312
351
676
911
803
991
669
50
293
841
545
598
737
894
231
754
588
83
873
767
833
482
905
903
970
571
715
59
777
697
537
861
339
212
149
889
905
70
970
307
830
465
968
291
430
317
942
944
330
235
814
880
415
76
 12
3
99
24
46
75
63
57
55
10
62
34
52
 3
1
2
4
 100
154
60
97
638
139
150
570
579
601
647
804
237
245
549
288
347
778
282
916
441
974
145
957
886
655
702
930
618
132
520
972
48
94
54
682
433
896
134
845
636
242
842
125
141
240
130
409
666
948
938
604
110
474
484
364
40
807
271
438
288
201
814
754
589
341
576
146
952
819
923
222
535
336
83
314
911
303
911
384
601
249
330
735
271
142
204
405
783
775
449
590
139
109
276
45
205
454
836
82
841

1
 6
 4
 3
 3
 58
 7
 2
 50

import java.util.*;

import java.io.*;
public class A {
    public static long time = 0;

    public static void main(String[] args) throws Exception {
        time = System.currentTimeMillis();
        solve();
        out.flush();
    }

    public static void solve() throws Exception {
        int n1 = ni();
        int[] l1 = nil(n1);
        Shuffle.ints(l1);
        Arrays.sort(l1);
        int low = 0;
        int high = n1 - 1;
//      px(l1);
        for (;high - low > 1;){
            int mid = (low + high) >> 1;
            if (check(l1,mid)){
                low = mid;
            }
            else {
                high = mid;
            }
        }
        if (check(l1, high)){
            out.println(n1 - high);
        }
        else {
            out.println(n1 - low);
        }
        
    }
    public static boolean check(int[] l1,int less){
        int ptr = less;
        int matched = 0;
        for (int i =0; i < less; i++){
            for (;;){
                if (ptr >= l1.length) break;
                if (l1[ptr] >= 2 * l1[i]){
                    matched++;
                    ptr++;
                    break;
                }
                else ptr ++;
            }
        }
//      px(less, matched);
        if (matched >= less){
            return true;
        }
        return false;
    }
    

    public static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    public static StringTokenizer st = null;

    public static String nx() throws Exception {
        for (; st == null || !st.hasMoreTokens();) {
            String k1 = in.readLine();
            if (k1 == null) return null;
            st = new StringTokenizer(k1);
        }
        return st.nextToken();
    }

    public static int ni() throws Exception {
        return Integer.parseInt(nx());
    }

    public static long nl() throws Exception {
        return Long.parseLong(nx());
    }

    public static double nd() throws Exception {
        return Double.parseDouble(nx());
    }

    private static int[] nil(int n1) throws Exception {
        int[] l1 = new int[n1];
        for (int i = 0; i < n1; i++) {
            l1[i] = ni();
        }
        return l1;
    }

    public static void px(Object... l1) {
        System.out.println(Arrays.deepToString(l1));
    }

    public static boolean FLUSH = false;
    public static PrintWriter out = new PrintWriter(System.out, FLUSH);

    public static void p(Object... l1) {
        for (int i = 0; i < l1.length; i++) {
            if (i != 0) out.print(' ');
            out.print(l1[i].toString());
        }
    }

    public static void pn(Object... l1) {
        for (int i = 0; i < l1.length; i++) {
            if (i != 0) out.print(' ');
            out.print(l1[i].toString());
        }
        out.println();
    }

    public static void pn(Collection l1) {
        boolean first = true;
        for (Object e : l1) {
            if (first) first = false;
            else out.print(' ');
            out.print(e.toString());
        }
        out.println();
    }

    private static class Arrayz {
        public static int smallerNo(int[] l1, int n1) {
            if (l1[0] >= n1) { return 0; }
            int low = 0;
            int high = l1.length - 1;
            for (; high - low > 1;) {
                int mid = (high + low) >> 1;
                if (l1[mid] >= n1) high = mid;
                else if (l1[mid] < n1) low = mid;
            }
            if (l1[high] < n1){
                return high + 1;
            }
            return low + 1;
        }
    }

    private static class Shuffle {
        private static Random r1 = new Random();

        public static void ints(int[] l1) {
            for (int i = 0; i < l1.length; i++) {
                int k1 = i + r1.nextInt(l1.length - i);
                int temp = l1[i];
                l1[i] = l1[k1];
                l1[k1] = temp;
            }
        }
    }

}
