import java.io.*;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.function.Predicate;
public class glo {
public static void main(String[] args) {
FastIO io = new FastIO();
int n = io.nextInt();
int k = io.nextInt();
long[] arr = new long[n];
for (int i = 0; i < n; i++) arr[i] = io.nextInt();
int[] leftLIS = new int[n];
ArrayList<Long> ll = new ArrayList<>();
for (int i = 0; i < n; i++) {
long val = arr[i];
int upp = firstTrue(0, ll.size() - 1, (x) -> ll.get(x) >= val);
if (upp == ll.size()) ll.add(val);
ll.set(upp, val);
leftLIS[i] = upp + 1;
}
ArrayList<Long> rl = new ArrayList<>();
int ans = ll.size();
for (int i = n - 1; i > 0; i--) {
long val = arr[i] + k;
int low = firstTrue(0, rl.size() - 1, (x) -> rl.get(x) <= val);
if (low == rl.size()) rl.add(val);
rl.set(low, val);
int finalI = i;
int rLIS = lastTrue(0, rl.size()-1, (x) -> rl.get(x) > arr[finalI - 1]) + 1;
ans = Math.max(ans, rLIS + leftLIS[i - 1]);
}
io.println(ans);
io.close();
}
private static int lastTrue(int lo, int hi, Predicate<Integer> test) {
lo--;
for (int dif = hi - lo; dif > 0; dif /= 2) {
while (lo + dif <= hi && test.test(lo + dif)) {
lo += dif;
}
}
return lo;
}
private static int firstTrue(int lo, int hi, Predicate<Integer> test) {
hi++;
while (lo < hi) {
int mid = lo + (hi - lo) / 2;
if (test.test(mid)) {
hi = mid;
} else {
lo = mid + 1;
}
}
return lo;
}
private static class FastIO extends PrintWriter {
private final InputStream stream;
private final byte[] buf = new byte[1 << 16];
private int curChar, numChars;
// standard input
public FastIO() {
this(System.in, System.out);
}
public FastIO(InputStream i, OutputStream o) {
super(o);
stream = i;
}
// file input
public FastIO(String i, String o) throws IOException {
super(new FileWriter(o));
stream = new FileInputStream(i);
}
// throws InputMismatchException() if previously detected end of file
private int nextByte() {
if (numChars == -1) throw new InputMismatchException();
if (curChar >= numChars) {
curChar = 0;
try {
numChars = stream.read(buf);
} catch (IOException e) {
throw new InputMismatchException();
}
if (numChars == -1) return -1; // end of file
}
return buf[curChar++];
}
// to read in entire lines, replace c <= ' '
// with a function that checks whether c is a line break
public String next() {
int c;
do {
c = nextByte();
} while (c <= ' ');
StringBuilder res = new StringBuilder();
do {
res.appendCodePoint(c);
c = nextByte();
} while (c > ' ');
return res.toString();
}
public int nextInt() { // nextLong() would be implemented similarly
int c;
do {
c = nextByte();
} while (c <= ' ');
int sgn = 1;
if (c == '-') {
sgn = -1;
c = nextByte();
}
int res = 0;
do {
if (c < '0' || c > '9')
throw new InputMismatchException();
res = 10 * res + c - '0';
c = nextByte();
} while (c > ' ');
return res * sgn;
}
public long nextLong() { // nextLong() would be implemented similarly
int c;
do {
c = nextByte();
} while (c <= ' ');
int sgn = 1;
if (c == '-') {
sgn = -1;
c = nextByte();
}
long res = 0;
do {
if (c < '0' || c > '9')
throw new InputMismatchException();
res = 10 * res + c - '0';
c = nextByte();
} while (c > ' ');
return res * sgn;
}
public double nextDouble() {
return Double.parseDouble(next());
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
73 ms |
9252 KB |
Output is correct |
2 |
Correct |
73 ms |
9036 KB |
Output is correct |
3 |
Correct |
78 ms |
9208 KB |
Output is correct |
4 |
Correct |
85 ms |
8988 KB |
Output is correct |
5 |
Correct |
76 ms |
8912 KB |
Output is correct |
6 |
Correct |
80 ms |
9116 KB |
Output is correct |
7 |
Correct |
79 ms |
9196 KB |
Output is correct |
8 |
Correct |
71 ms |
8988 KB |
Output is correct |
9 |
Correct |
75 ms |
9092 KB |
Output is correct |
10 |
Correct |
74 ms |
9012 KB |
Output is correct |
11 |
Correct |
74 ms |
8920 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
73 ms |
9252 KB |
Output is correct |
2 |
Correct |
73 ms |
9036 KB |
Output is correct |
3 |
Correct |
78 ms |
9208 KB |
Output is correct |
4 |
Correct |
85 ms |
8988 KB |
Output is correct |
5 |
Correct |
76 ms |
8912 KB |
Output is correct |
6 |
Correct |
80 ms |
9116 KB |
Output is correct |
7 |
Correct |
79 ms |
9196 KB |
Output is correct |
8 |
Correct |
71 ms |
8988 KB |
Output is correct |
9 |
Correct |
75 ms |
9092 KB |
Output is correct |
10 |
Correct |
74 ms |
9012 KB |
Output is correct |
11 |
Correct |
74 ms |
8920 KB |
Output is correct |
12 |
Correct |
71 ms |
9088 KB |
Output is correct |
13 |
Correct |
74 ms |
8948 KB |
Output is correct |
14 |
Correct |
72 ms |
8984 KB |
Output is correct |
15 |
Correct |
72 ms |
9136 KB |
Output is correct |
16 |
Correct |
85 ms |
9004 KB |
Output is correct |
17 |
Correct |
75 ms |
9052 KB |
Output is correct |
18 |
Correct |
72 ms |
9108 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
73 ms |
9252 KB |
Output is correct |
2 |
Correct |
73 ms |
9036 KB |
Output is correct |
3 |
Correct |
78 ms |
9208 KB |
Output is correct |
4 |
Correct |
85 ms |
8988 KB |
Output is correct |
5 |
Correct |
76 ms |
8912 KB |
Output is correct |
6 |
Correct |
80 ms |
9116 KB |
Output is correct |
7 |
Correct |
79 ms |
9196 KB |
Output is correct |
8 |
Correct |
71 ms |
8988 KB |
Output is correct |
9 |
Correct |
75 ms |
9092 KB |
Output is correct |
10 |
Correct |
74 ms |
9012 KB |
Output is correct |
11 |
Correct |
74 ms |
8920 KB |
Output is correct |
12 |
Correct |
71 ms |
9088 KB |
Output is correct |
13 |
Correct |
74 ms |
8948 KB |
Output is correct |
14 |
Correct |
72 ms |
8984 KB |
Output is correct |
15 |
Correct |
72 ms |
9136 KB |
Output is correct |
16 |
Correct |
85 ms |
9004 KB |
Output is correct |
17 |
Correct |
75 ms |
9052 KB |
Output is correct |
18 |
Correct |
72 ms |
9108 KB |
Output is correct |
19 |
Correct |
102 ms |
9768 KB |
Output is correct |
20 |
Correct |
108 ms |
9640 KB |
Output is correct |
21 |
Correct |
98 ms |
9924 KB |
Output is correct |
22 |
Correct |
98 ms |
9808 KB |
Output is correct |
23 |
Correct |
101 ms |
10460 KB |
Output is correct |
24 |
Correct |
108 ms |
10388 KB |
Output is correct |
25 |
Correct |
99 ms |
10396 KB |
Output is correct |
26 |
Correct |
100 ms |
10156 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
332 ms |
17972 KB |
Output is correct |
2 |
Correct |
333 ms |
17840 KB |
Output is correct |
3 |
Correct |
329 ms |
18140 KB |
Output is correct |
4 |
Correct |
333 ms |
17972 KB |
Output is correct |
5 |
Correct |
313 ms |
24752 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
260 ms |
14616 KB |
Output is correct |
2 |
Correct |
254 ms |
14524 KB |
Output is correct |
3 |
Correct |
231 ms |
14576 KB |
Output is correct |
4 |
Correct |
245 ms |
15840 KB |
Output is correct |
5 |
Correct |
73 ms |
9108 KB |
Output is correct |
6 |
Correct |
221 ms |
15924 KB |
Output is correct |
7 |
Correct |
255 ms |
14776 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
248 ms |
15756 KB |
Output is correct |
2 |
Correct |
249 ms |
15764 KB |
Output is correct |
3 |
Correct |
302 ms |
18048 KB |
Output is correct |
4 |
Correct |
323 ms |
24952 KB |
Output is correct |
5 |
Correct |
235 ms |
18496 KB |
Output is correct |
6 |
Correct |
308 ms |
24632 KB |
Output is correct |
7 |
Correct |
338 ms |
25404 KB |
Output is correct |
8 |
Correct |
255 ms |
15540 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
73 ms |
9252 KB |
Output is correct |
2 |
Correct |
73 ms |
9036 KB |
Output is correct |
3 |
Correct |
78 ms |
9208 KB |
Output is correct |
4 |
Correct |
85 ms |
8988 KB |
Output is correct |
5 |
Correct |
76 ms |
8912 KB |
Output is correct |
6 |
Correct |
80 ms |
9116 KB |
Output is correct |
7 |
Correct |
79 ms |
9196 KB |
Output is correct |
8 |
Correct |
71 ms |
8988 KB |
Output is correct |
9 |
Correct |
75 ms |
9092 KB |
Output is correct |
10 |
Correct |
74 ms |
9012 KB |
Output is correct |
11 |
Correct |
74 ms |
8920 KB |
Output is correct |
12 |
Correct |
71 ms |
9088 KB |
Output is correct |
13 |
Correct |
74 ms |
8948 KB |
Output is correct |
14 |
Correct |
72 ms |
8984 KB |
Output is correct |
15 |
Correct |
72 ms |
9136 KB |
Output is correct |
16 |
Correct |
85 ms |
9004 KB |
Output is correct |
17 |
Correct |
75 ms |
9052 KB |
Output is correct |
18 |
Correct |
72 ms |
9108 KB |
Output is correct |
19 |
Correct |
102 ms |
9768 KB |
Output is correct |
20 |
Correct |
108 ms |
9640 KB |
Output is correct |
21 |
Correct |
98 ms |
9924 KB |
Output is correct |
22 |
Correct |
98 ms |
9808 KB |
Output is correct |
23 |
Correct |
101 ms |
10460 KB |
Output is correct |
24 |
Correct |
108 ms |
10388 KB |
Output is correct |
25 |
Correct |
99 ms |
10396 KB |
Output is correct |
26 |
Correct |
100 ms |
10156 KB |
Output is correct |
27 |
Correct |
332 ms |
17972 KB |
Output is correct |
28 |
Correct |
333 ms |
17840 KB |
Output is correct |
29 |
Correct |
329 ms |
18140 KB |
Output is correct |
30 |
Correct |
333 ms |
17972 KB |
Output is correct |
31 |
Correct |
313 ms |
24752 KB |
Output is correct |
32 |
Correct |
260 ms |
14616 KB |
Output is correct |
33 |
Correct |
254 ms |
14524 KB |
Output is correct |
34 |
Correct |
231 ms |
14576 KB |
Output is correct |
35 |
Correct |
245 ms |
15840 KB |
Output is correct |
36 |
Correct |
73 ms |
9108 KB |
Output is correct |
37 |
Correct |
221 ms |
15924 KB |
Output is correct |
38 |
Correct |
255 ms |
14776 KB |
Output is correct |
39 |
Correct |
248 ms |
15756 KB |
Output is correct |
40 |
Correct |
249 ms |
15764 KB |
Output is correct |
41 |
Correct |
302 ms |
18048 KB |
Output is correct |
42 |
Correct |
323 ms |
24952 KB |
Output is correct |
43 |
Correct |
235 ms |
18496 KB |
Output is correct |
44 |
Correct |
308 ms |
24632 KB |
Output is correct |
45 |
Correct |
338 ms |
25404 KB |
Output is correct |
46 |
Correct |
255 ms |
15540 KB |
Output is correct |
47 |
Correct |
264 ms |
15892 KB |
Output is correct |
48 |
Correct |
270 ms |
15628 KB |
Output is correct |
49 |
Correct |
330 ms |
17872 KB |
Output is correct |
50 |
Correct |
316 ms |
24904 KB |
Output is correct |
51 |
Correct |
379 ms |
23984 KB |
Output is correct |
52 |
Correct |
280 ms |
25416 KB |
Output is correct |
53 |
Correct |
333 ms |
25412 KB |
Output is correct |
54 |
Correct |
330 ms |
26264 KB |
Output is correct |
55 |
Correct |
301 ms |
18184 KB |
Output is correct |