public void solve(int testNumber, InputReader in, PrintWriter out) { int N = in.nextInt(), K = in.nextInt(), a = in.nextInt(); int M = in.nextInt(); int[] A = new int[M]; for (int i = 0; i < M; ++i) A[i] = in.nextInt(); int cnt = (N + 1) / (a + 1); TreeSet<Integer> S = new TreeSet<>(); S.add(0); S.add(N + 1); for (int i = 0; i < M; ++i) { int x = A[i]; int prev = S.lower(x), next = S.higher(x); int ccnt = (next - prev) / (a + 1); int ncnt = (x - prev) / (a + 1) + (next - x) / (a + 1); cnt -= ccnt; cnt += ncnt; if (cnt < K) { out.println(i + 1); return; } S.add(x); } out.println(-1); }
public void solve(int testNumber, InputReader in, PrintWriter out) { int n = in.nextInt(), m = in.nextInt(), k = in.nextInt() - 1; int pos = 0; int[] sa = new int[m + 1], sb = new int[m + 1]; for (int i = 1; i <= m; ++i) { sa[i] = in.nextInt() - 1; sb[i] = in.nextInt() - 1; } int[] posk = new int[m + 2]; posk[m + 1] = k; for (int i = m; i > 0; --i) { posk[i] = posk[i + 1]; if (posk[i] == sa[i] || posk[i] == sb[i]) { posk[i] ^= sa[i] ^ sb[i]; } } int pos0 = 0; for (int i = 1; i <= m; ++i) { if (pos0 == posk[i + 1]) { out.println(i); return; } if (pos0 == sa[i] || pos0 == sb[i]) { pos0 ^= sa[i] ^ sb[i]; } } throw new RuntimeException(); }