#include <bits/stdc++.h>
using namespace std;
// Observation #1 : If D = N, this problem is LIS
// (supposedly we need to use segment tree)
// (because of the additional constraints if D != N)
// However the D will not always be N
// Also there are some positions that we can't go to (because of the distance restriction)
// Observation #2 : But, it is not correct to assume that we can only jump to positions with relative distance <= D
// Because we can use the positions with value < curr as "stepping stones"
// The farthest position we can jump to can be found in O(N log N) using DSU and sorting
// sort the numbers and add the positions if val < curr
// Join two positions if the distance < D
// the farthest position in the DSU is the farthest position we can jump - D
// So now we can simplify the problem as LIS in a bounded range
// Observation #3 : We can solve this LIS in O(N log N) offline
// solve the positions from the largest value
// arr[curr] = rmq(curr + 1, curr + range[curr] + D) + 1
// Note that we have to solve positions with large value from the left
// Because we need indexes that have value < curr_value
// Observation #4 : the constraint p_{m} = N isn't important
// because we can extend the LIS until p_{m} = N
// if for example current p_{m} is A
// We can add p_{m + 1} = A + 1, p_{m + 2} = A + 2, .. until p_{last} = N
// Adding numbers will not decrease the impression score
// Supposedly AC with time complexity O(N log N)
#define pii pair<int, int>
#define fi first
#define se second
const int MX = 3e5 + 100;
inline void chmax(int& a, int b){
if(b > a) a = b;
}
struct segtree{
int seg[MX * 2];
segtree(){
memset(seg, 0, sizeof seg);
}
inline void upd(int p, int value){ // 0-based
for(seg[p += MX] = value; p > 1; p >>= 1) seg[p >> 1] = max(seg[p], seg[p ^ 1]);
}
inline int range(int l, int r){ // 0-based [l, r]
int res = 0;
for(l += MX, r += MX + 1; l < r; l >>= 1, r >>= 1){
if(l & 1) chmax(res, seg[l++]);
if(r & 1) chmax(res, seg[--r]);
}
return res;
}
} st;
struct disjoint_set{
int par[MX], val[MX];
disjoint_set(){
for(int i = 0; i < MX; i++) val[i] = par[i] = i;
}
inline int f(int x){
if(par[x] == x) return x;
else return par[x] = f(par[x]);
}
inline void Join(int u, int v){
int fu = f(u), fv = f(v);
if(fu == fv) return;
par[fu] = fv;
chmax(val[fv], val[fu]);
}
inline int value(int x){
return val[f(x)];
}
} dsu;
int N, D, arr[MX], rg[MX], ans[MX];
vector<int> pos[MX];
int main(){
ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
vector<int> v;
cin >> N >> D;
for(int i = 0; i < N; i++){
cin >> arr[i]; v.push_back(arr[i]);
}
sort(v.begin(), v.end());
v.resize(unique(v.begin(), v.end()) - v.begin());
for(int i = 0; i < N; i++) arr[i] = lower_bound(v.begin(), v.end(), arr[i]) - v.begin();
for(int i = 0; i < N; i++) pos[arr[i]].push_back(i);
set<int> s; set<int>::iterator it;
for(int i = 0; i < N; i++){
for(auto& a : pos[i]){
it = s.lower_bound(a);
if(it != s.end() && (*it) - a <= D) dsu.Join(a, (*it));
if(it != s.begin()){
it--;
if(a - (*it) <= D) dsu.Join(a, (*it));
}
s.insert(a);
}
for(auto& a : pos[i]){
rg[a] = dsu.value(a);
}
}
for(int i = N - 1; i >= 0; i--){
for(auto& a : pos[i]){
ans[a] = 1 + st.range(a + 1, min(N - 1, rg[a] + D));
st.upd(a, ans[a]);
}
}
int sol = 0;
for(int i = 0; i < N; i++) chmax(sol, ans[i]);
cout << sol << '\n';
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
11980 KB |
Output is correct |
2 |
Correct |
7 ms |
11980 KB |
Output is correct |
3 |
Correct |
8 ms |
11980 KB |
Output is correct |
4 |
Correct |
7 ms |
12032 KB |
Output is correct |
5 |
Correct |
9 ms |
11984 KB |
Output is correct |
6 |
Correct |
7 ms |
11980 KB |
Output is correct |
7 |
Correct |
8 ms |
11980 KB |
Output is correct |
8 |
Correct |
7 ms |
11980 KB |
Output is correct |
9 |
Correct |
8 ms |
11980 KB |
Output is correct |
10 |
Correct |
7 ms |
12056 KB |
Output is correct |
11 |
Correct |
7 ms |
11980 KB |
Output is correct |
12 |
Correct |
7 ms |
11980 KB |
Output is correct |
13 |
Correct |
7 ms |
11980 KB |
Output is correct |
14 |
Correct |
8 ms |
12044 KB |
Output is correct |
15 |
Correct |
7 ms |
11980 KB |
Output is correct |
16 |
Correct |
8 ms |
11992 KB |
Output is correct |
17 |
Correct |
7 ms |
11980 KB |
Output is correct |
18 |
Correct |
8 ms |
12076 KB |
Output is correct |
19 |
Correct |
7 ms |
11980 KB |
Output is correct |
20 |
Correct |
7 ms |
11980 KB |
Output is correct |
21 |
Correct |
8 ms |
11980 KB |
Output is correct |
22 |
Correct |
7 ms |
11980 KB |
Output is correct |
23 |
Correct |
7 ms |
11980 KB |
Output is correct |
24 |
Correct |
7 ms |
11980 KB |
Output is correct |
25 |
Correct |
7 ms |
12056 KB |
Output is correct |
26 |
Correct |
8 ms |
12048 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
11980 KB |
Output is correct |
2 |
Correct |
7 ms |
11980 KB |
Output is correct |
3 |
Correct |
8 ms |
11980 KB |
Output is correct |
4 |
Correct |
7 ms |
12032 KB |
Output is correct |
5 |
Correct |
9 ms |
11984 KB |
Output is correct |
6 |
Correct |
7 ms |
11980 KB |
Output is correct |
7 |
Correct |
8 ms |
11980 KB |
Output is correct |
8 |
Correct |
7 ms |
11980 KB |
Output is correct |
9 |
Correct |
8 ms |
11980 KB |
Output is correct |
10 |
Correct |
7 ms |
12056 KB |
Output is correct |
11 |
Correct |
7 ms |
11980 KB |
Output is correct |
12 |
Correct |
7 ms |
11980 KB |
Output is correct |
13 |
Correct |
7 ms |
11980 KB |
Output is correct |
14 |
Correct |
8 ms |
12044 KB |
Output is correct |
15 |
Correct |
7 ms |
11980 KB |
Output is correct |
16 |
Correct |
8 ms |
11992 KB |
Output is correct |
17 |
Correct |
7 ms |
11980 KB |
Output is correct |
18 |
Correct |
8 ms |
12076 KB |
Output is correct |
19 |
Correct |
7 ms |
11980 KB |
Output is correct |
20 |
Correct |
7 ms |
11980 KB |
Output is correct |
21 |
Correct |
8 ms |
11980 KB |
Output is correct |
22 |
Correct |
7 ms |
11980 KB |
Output is correct |
23 |
Correct |
7 ms |
11980 KB |
Output is correct |
24 |
Correct |
7 ms |
11980 KB |
Output is correct |
25 |
Correct |
7 ms |
12056 KB |
Output is correct |
26 |
Correct |
8 ms |
12048 KB |
Output is correct |
27 |
Correct |
7 ms |
12120 KB |
Output is correct |
28 |
Correct |
7 ms |
12108 KB |
Output is correct |
29 |
Correct |
9 ms |
12108 KB |
Output is correct |
30 |
Correct |
7 ms |
12108 KB |
Output is correct |
31 |
Correct |
8 ms |
12116 KB |
Output is correct |
32 |
Correct |
8 ms |
12108 KB |
Output is correct |
33 |
Correct |
7 ms |
12108 KB |
Output is correct |
34 |
Correct |
8 ms |
12108 KB |
Output is correct |
35 |
Correct |
9 ms |
12108 KB |
Output is correct |
36 |
Correct |
8 ms |
12108 KB |
Output is correct |
37 |
Correct |
7 ms |
12108 KB |
Output is correct |
38 |
Correct |
7 ms |
12108 KB |
Output is correct |
39 |
Correct |
7 ms |
12044 KB |
Output is correct |
40 |
Correct |
7 ms |
12056 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
11980 KB |
Output is correct |
2 |
Correct |
7 ms |
11980 KB |
Output is correct |
3 |
Correct |
8 ms |
11980 KB |
Output is correct |
4 |
Correct |
7 ms |
12032 KB |
Output is correct |
5 |
Correct |
9 ms |
11984 KB |
Output is correct |
6 |
Correct |
7 ms |
11980 KB |
Output is correct |
7 |
Correct |
8 ms |
11980 KB |
Output is correct |
8 |
Correct |
7 ms |
11980 KB |
Output is correct |
9 |
Correct |
8 ms |
11980 KB |
Output is correct |
10 |
Correct |
7 ms |
12056 KB |
Output is correct |
11 |
Correct |
7 ms |
11980 KB |
Output is correct |
12 |
Correct |
7 ms |
11980 KB |
Output is correct |
13 |
Correct |
7 ms |
11980 KB |
Output is correct |
14 |
Correct |
8 ms |
12044 KB |
Output is correct |
15 |
Correct |
7 ms |
11980 KB |
Output is correct |
16 |
Correct |
8 ms |
11992 KB |
Output is correct |
17 |
Correct |
7 ms |
11980 KB |
Output is correct |
18 |
Correct |
8 ms |
12076 KB |
Output is correct |
19 |
Correct |
7 ms |
11980 KB |
Output is correct |
20 |
Correct |
7 ms |
11980 KB |
Output is correct |
21 |
Correct |
8 ms |
11980 KB |
Output is correct |
22 |
Correct |
7 ms |
11980 KB |
Output is correct |
23 |
Correct |
7 ms |
11980 KB |
Output is correct |
24 |
Correct |
7 ms |
11980 KB |
Output is correct |
25 |
Correct |
7 ms |
12056 KB |
Output is correct |
26 |
Correct |
8 ms |
12048 KB |
Output is correct |
27 |
Correct |
7 ms |
12120 KB |
Output is correct |
28 |
Correct |
7 ms |
12108 KB |
Output is correct |
29 |
Correct |
9 ms |
12108 KB |
Output is correct |
30 |
Correct |
7 ms |
12108 KB |
Output is correct |
31 |
Correct |
8 ms |
12116 KB |
Output is correct |
32 |
Correct |
8 ms |
12108 KB |
Output is correct |
33 |
Correct |
7 ms |
12108 KB |
Output is correct |
34 |
Correct |
8 ms |
12108 KB |
Output is correct |
35 |
Correct |
9 ms |
12108 KB |
Output is correct |
36 |
Correct |
8 ms |
12108 KB |
Output is correct |
37 |
Correct |
7 ms |
12108 KB |
Output is correct |
38 |
Correct |
7 ms |
12108 KB |
Output is correct |
39 |
Correct |
7 ms |
12044 KB |
Output is correct |
40 |
Correct |
7 ms |
12056 KB |
Output is correct |
41 |
Correct |
12 ms |
12572 KB |
Output is correct |
42 |
Correct |
12 ms |
12700 KB |
Output is correct |
43 |
Correct |
10 ms |
12564 KB |
Output is correct |
44 |
Correct |
11 ms |
12492 KB |
Output is correct |
45 |
Correct |
12 ms |
12492 KB |
Output is correct |
46 |
Correct |
13 ms |
12740 KB |
Output is correct |
47 |
Correct |
12 ms |
12620 KB |
Output is correct |
48 |
Correct |
13 ms |
12620 KB |
Output is correct |
49 |
Correct |
13 ms |
12640 KB |
Output is correct |
50 |
Correct |
13 ms |
12680 KB |
Output is correct |
51 |
Correct |
12 ms |
12620 KB |
Output is correct |
52 |
Correct |
12 ms |
12748 KB |
Output is correct |
53 |
Correct |
11 ms |
12700 KB |
Output is correct |
54 |
Correct |
11 ms |
12748 KB |
Output is correct |
55 |
Correct |
14 ms |
12684 KB |
Output is correct |
56 |
Correct |
12 ms |
12684 KB |
Output is correct |
57 |
Correct |
12 ms |
12716 KB |
Output is correct |
58 |
Correct |
11 ms |
12688 KB |
Output is correct |
59 |
Correct |
13 ms |
12620 KB |
Output is correct |
60 |
Correct |
13 ms |
12696 KB |
Output is correct |
61 |
Correct |
13 ms |
12620 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
218 ms |
31980 KB |
Output is correct |
2 |
Correct |
187 ms |
32164 KB |
Output is correct |
3 |
Correct |
261 ms |
32440 KB |
Output is correct |
4 |
Correct |
508 ms |
38848 KB |
Output is correct |
5 |
Correct |
365 ms |
40204 KB |
Output is correct |
6 |
Correct |
509 ms |
40360 KB |
Output is correct |
7 |
Correct |
205 ms |
39964 KB |
Output is correct |
8 |
Correct |
232 ms |
40176 KB |
Output is correct |
9 |
Correct |
185 ms |
40128 KB |
Output is correct |
10 |
Correct |
192 ms |
40216 KB |
Output is correct |
11 |
Correct |
313 ms |
40144 KB |
Output is correct |
12 |
Correct |
346 ms |
40128 KB |
Output is correct |
13 |
Correct |
371 ms |
40336 KB |
Output is correct |
14 |
Correct |
522 ms |
40272 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
201 ms |
31932 KB |
Output is correct |
2 |
Correct |
323 ms |
32128 KB |
Output is correct |
3 |
Correct |
405 ms |
32696 KB |
Output is correct |
4 |
Correct |
565 ms |
40244 KB |
Output is correct |
5 |
Correct |
466 ms |
40124 KB |
Output is correct |
6 |
Correct |
609 ms |
40192 KB |
Output is correct |
7 |
Correct |
252 ms |
40196 KB |
Output is correct |
8 |
Correct |
243 ms |
40264 KB |
Output is correct |
9 |
Correct |
235 ms |
40008 KB |
Output is correct |
10 |
Correct |
351 ms |
40096 KB |
Output is correct |
11 |
Correct |
710 ms |
40192 KB |
Output is correct |
12 |
Correct |
453 ms |
40160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
11980 KB |
Output is correct |
2 |
Correct |
7 ms |
11980 KB |
Output is correct |
3 |
Correct |
8 ms |
11980 KB |
Output is correct |
4 |
Correct |
7 ms |
12032 KB |
Output is correct |
5 |
Correct |
9 ms |
11984 KB |
Output is correct |
6 |
Correct |
7 ms |
11980 KB |
Output is correct |
7 |
Correct |
8 ms |
11980 KB |
Output is correct |
8 |
Correct |
7 ms |
11980 KB |
Output is correct |
9 |
Correct |
8 ms |
11980 KB |
Output is correct |
10 |
Correct |
7 ms |
12056 KB |
Output is correct |
11 |
Correct |
7 ms |
11980 KB |
Output is correct |
12 |
Correct |
7 ms |
11980 KB |
Output is correct |
13 |
Correct |
7 ms |
11980 KB |
Output is correct |
14 |
Correct |
8 ms |
12044 KB |
Output is correct |
15 |
Correct |
7 ms |
11980 KB |
Output is correct |
16 |
Correct |
8 ms |
11992 KB |
Output is correct |
17 |
Correct |
7 ms |
11980 KB |
Output is correct |
18 |
Correct |
8 ms |
12076 KB |
Output is correct |
19 |
Correct |
7 ms |
11980 KB |
Output is correct |
20 |
Correct |
7 ms |
11980 KB |
Output is correct |
21 |
Correct |
8 ms |
11980 KB |
Output is correct |
22 |
Correct |
7 ms |
11980 KB |
Output is correct |
23 |
Correct |
7 ms |
11980 KB |
Output is correct |
24 |
Correct |
7 ms |
11980 KB |
Output is correct |
25 |
Correct |
7 ms |
12056 KB |
Output is correct |
26 |
Correct |
8 ms |
12048 KB |
Output is correct |
27 |
Correct |
7 ms |
12120 KB |
Output is correct |
28 |
Correct |
7 ms |
12108 KB |
Output is correct |
29 |
Correct |
9 ms |
12108 KB |
Output is correct |
30 |
Correct |
7 ms |
12108 KB |
Output is correct |
31 |
Correct |
8 ms |
12116 KB |
Output is correct |
32 |
Correct |
8 ms |
12108 KB |
Output is correct |
33 |
Correct |
7 ms |
12108 KB |
Output is correct |
34 |
Correct |
8 ms |
12108 KB |
Output is correct |
35 |
Correct |
9 ms |
12108 KB |
Output is correct |
36 |
Correct |
8 ms |
12108 KB |
Output is correct |
37 |
Correct |
7 ms |
12108 KB |
Output is correct |
38 |
Correct |
7 ms |
12108 KB |
Output is correct |
39 |
Correct |
7 ms |
12044 KB |
Output is correct |
40 |
Correct |
7 ms |
12056 KB |
Output is correct |
41 |
Correct |
12 ms |
12572 KB |
Output is correct |
42 |
Correct |
12 ms |
12700 KB |
Output is correct |
43 |
Correct |
10 ms |
12564 KB |
Output is correct |
44 |
Correct |
11 ms |
12492 KB |
Output is correct |
45 |
Correct |
12 ms |
12492 KB |
Output is correct |
46 |
Correct |
13 ms |
12740 KB |
Output is correct |
47 |
Correct |
12 ms |
12620 KB |
Output is correct |
48 |
Correct |
13 ms |
12620 KB |
Output is correct |
49 |
Correct |
13 ms |
12640 KB |
Output is correct |
50 |
Correct |
13 ms |
12680 KB |
Output is correct |
51 |
Correct |
12 ms |
12620 KB |
Output is correct |
52 |
Correct |
12 ms |
12748 KB |
Output is correct |
53 |
Correct |
11 ms |
12700 KB |
Output is correct |
54 |
Correct |
11 ms |
12748 KB |
Output is correct |
55 |
Correct |
14 ms |
12684 KB |
Output is correct |
56 |
Correct |
12 ms |
12684 KB |
Output is correct |
57 |
Correct |
12 ms |
12716 KB |
Output is correct |
58 |
Correct |
11 ms |
12688 KB |
Output is correct |
59 |
Correct |
13 ms |
12620 KB |
Output is correct |
60 |
Correct |
13 ms |
12696 KB |
Output is correct |
61 |
Correct |
13 ms |
12620 KB |
Output is correct |
62 |
Correct |
218 ms |
31980 KB |
Output is correct |
63 |
Correct |
187 ms |
32164 KB |
Output is correct |
64 |
Correct |
261 ms |
32440 KB |
Output is correct |
65 |
Correct |
508 ms |
38848 KB |
Output is correct |
66 |
Correct |
365 ms |
40204 KB |
Output is correct |
67 |
Correct |
509 ms |
40360 KB |
Output is correct |
68 |
Correct |
205 ms |
39964 KB |
Output is correct |
69 |
Correct |
232 ms |
40176 KB |
Output is correct |
70 |
Correct |
185 ms |
40128 KB |
Output is correct |
71 |
Correct |
192 ms |
40216 KB |
Output is correct |
72 |
Correct |
313 ms |
40144 KB |
Output is correct |
73 |
Correct |
346 ms |
40128 KB |
Output is correct |
74 |
Correct |
371 ms |
40336 KB |
Output is correct |
75 |
Correct |
522 ms |
40272 KB |
Output is correct |
76 |
Correct |
201 ms |
31932 KB |
Output is correct |
77 |
Correct |
323 ms |
32128 KB |
Output is correct |
78 |
Correct |
405 ms |
32696 KB |
Output is correct |
79 |
Correct |
565 ms |
40244 KB |
Output is correct |
80 |
Correct |
466 ms |
40124 KB |
Output is correct |
81 |
Correct |
609 ms |
40192 KB |
Output is correct |
82 |
Correct |
252 ms |
40196 KB |
Output is correct |
83 |
Correct |
243 ms |
40264 KB |
Output is correct |
84 |
Correct |
235 ms |
40008 KB |
Output is correct |
85 |
Correct |
351 ms |
40096 KB |
Output is correct |
86 |
Correct |
710 ms |
40192 KB |
Output is correct |
87 |
Correct |
453 ms |
40160 KB |
Output is correct |
88 |
Correct |
407 ms |
32412 KB |
Output is correct |
89 |
Correct |
614 ms |
39800 KB |
Output is correct |
90 |
Correct |
553 ms |
33456 KB |
Output is correct |
91 |
Correct |
626 ms |
40164 KB |
Output is correct |
92 |
Correct |
236 ms |
32676 KB |
Output is correct |
93 |
Correct |
436 ms |
32468 KB |
Output is correct |
94 |
Correct |
557 ms |
37356 KB |
Output is correct |
95 |
Correct |
464 ms |
40224 KB |
Output is correct |
96 |
Correct |
516 ms |
40176 KB |
Output is correct |
97 |
Correct |
604 ms |
40140 KB |
Output is correct |
98 |
Correct |
646 ms |
40224 KB |
Output is correct |
99 |
Correct |
652 ms |
40144 KB |
Output is correct |
100 |
Correct |
589 ms |
40232 KB |
Output is correct |
101 |
Correct |
229 ms |
40132 KB |
Output is correct |
102 |
Correct |
225 ms |
40148 KB |
Output is correct |
103 |
Correct |
270 ms |
40200 KB |
Output is correct |
104 |
Correct |
301 ms |
40140 KB |
Output is correct |
105 |
Correct |
376 ms |
40236 KB |
Output is correct |
106 |
Correct |
295 ms |
40140 KB |
Output is correct |
107 |
Correct |
334 ms |
40168 KB |
Output is correct |
108 |
Correct |
511 ms |
40156 KB |
Output is correct |
109 |
Correct |
324 ms |
40172 KB |
Output is correct |
110 |
Correct |
539 ms |
40168 KB |
Output is correct |
111 |
Correct |
565 ms |
40156 KB |
Output is correct |
112 |
Correct |
349 ms |
40172 KB |
Output is correct |
113 |
Correct |
553 ms |
40200 KB |
Output is correct |
114 |
Correct |
528 ms |
40124 KB |
Output is correct |
115 |
Correct |
236 ms |
40168 KB |
Output is correct |
116 |
Correct |
236 ms |
40144 KB |
Output is correct |
117 |
Correct |
298 ms |
40116 KB |
Output is correct |
118 |
Correct |
297 ms |
40232 KB |
Output is correct |
119 |
Correct |
314 ms |
40116 KB |
Output is correct |
120 |
Correct |
311 ms |
40200 KB |
Output is correct |