static int[] online_sampling(int n, int k) {
		Map<Integer, Integer> H = new HashMap<Integer, Integer>();
		Random gen = new Random(); // random num generator.
		for (int i = 0; i < k; ++i) {
			// Generate random int in [0, n − 1 − i].
			int r = gen.nextInt(n - i);
			Integer ptr1 = H.get(r), ptr2 = H.get(n - 1 - i);
			if (ptr1 == null && ptr2 == null) {
				H.put(r, n - 1 - i);
				H.put(n - 1 - i, r);
			} else if (ptr1 == null && ptr2 != null) {
				H.put(r, ptr2);
				H.put(n - 1 - i, r);
			} else if (ptr1 != null && ptr2 == null) {
				H.put(n - 1 - i, ptr1);
				H.put(r, n - 1 - i);
			} else {
				H.put(n - 1 - i, ptr1);
				H.put(r, ptr2);
			}
		}

		int[] res = new int[k];
		for (int i = 0; i < k; ++i) {
			res[i] = H.get(n - 1 - i);
		}
		return res;
	}