File tree 1 file changed +25
-29
lines changed
1 file changed +25
-29
lines changed Original file line number Diff line number Diff line change @@ -15,51 +15,47 @@ int main() {
15
15
16
16
while (cases-- != 0 ) {
17
17
memset (p, -1 , sizeof p);
18
- memset (t, 0 , sizeof t);
19
18
memset (d, 0 , sizeof d);
20
19
21
20
for (int i = 0 ; getline (cin, s) && s != " " ; ++i) {
22
21
a[i] = stoi (s);
23
22
n = i;
24
23
}
25
-
26
24
++n;
27
25
28
26
int l = 1 ;
29
- t[0 ] = a[0 ];
27
+ t[0 ] = a[0 ];
30
28
31
- for (int i = 1 , idx ; i < n; ++i) {
32
- idx = upper_bound (t, t + l, a[i]) - t;
29
+ for (int i = 1 ; i < n; ++i) {
30
+ int idx = upper_bound (t, t + l, a[i]) - t;
33
31
34
- if (idx > 0 && a[i] > t[idx - 1 ]) {
35
- t[idx] = a[i];
36
- d[idx] = i;
37
- p[d[idx]] = d[idx - 1 ];
38
- } else if (idx == 0 ) {
39
- t[idx] = a[i];
40
- d[idx] = i;
41
- p[d[idx]] = d[idx - 1 ];
42
- }
32
+ if ((idx > 0 && a[i] > t[idx - 1 ]) || idx == 0 ) {
33
+ t[idx] = a[i];
34
+ d[idx] = i;
35
+ p[i] = d[idx - 1 ];
43
36
44
- if (idx == l) {
45
- ++l;
46
- }
47
- }
37
+ if (idx == l) {
38
+ ++l;
39
+ }
40
+ }
41
+ }
48
42
49
- printf (" Max hits: %d\n " , l);
43
+ printf (" Max hits: %d\n " , l);
50
44
51
- int cur = d[l - 1 ];
52
- int idx = l - 1 ;
53
- do {
54
- sol[idx--] = a[cur];
55
- cur = p[cur];
56
- } while (cur != -1 );
45
+ int cur = d[l - 1 ];
46
+ int idx = l - 1 ;
47
+ do {
48
+ sol[idx--] = a[cur];
49
+ cur = p[cur];
50
+ } while (cur != -1 );
57
51
58
- for (int i = 0 ; i < l; ++i) {
59
- printf (" %d\n " , sol[i]);
60
- }
52
+ for (int i = 0 ; i < l; ++i) {
53
+ printf (" %d\n " , sol[i]);
54
+ }
61
55
62
- puts (" " );
56
+ if (cases) {
57
+ puts (" " );
58
+ }
63
59
}
64
60
65
61
return 0 ;
You can’t perform that action at this time.
0 commit comments