@@ -7,7 +7,7 @@ import kotlin.math.max
7
7
8
8
class Solution {
9
9
fun maximumSumSubsequence (nums : IntArray , queries : Array <IntArray >): Int {
10
- val tree: Array <LongArray ? > = build(nums)
10
+ val tree: Array <LongArray > = build(nums)
11
11
var result: Long = 0
12
12
for (i in queries.indices) {
13
13
result + = set(tree, queries[i][0 ], queries[i][1 ])
@@ -23,103 +23,103 @@ class Solution {
23
23
private const val NN = 3
24
24
private const val MOD = 1000000007
25
25
26
- private fun build (nums : IntArray ): Array <LongArray ? > {
26
+ private fun build (nums : IntArray ): Array <LongArray > {
27
27
val len = nums.size
28
28
var size = 1
29
29
while (size < len) {
30
30
size = size shl 1
31
31
}
32
- val tree = Array <LongArray ? >(size * 2 ) { LongArray (4 ) }
32
+ val tree = Array <LongArray >(size * 2 ) { LongArray (4 ) }
33
33
for (i in 0 until len) {
34
- tree[size + i]!! [YY ] = nums[i].toLong()
34
+ tree[size + i][YY ] = nums[i].toLong()
35
35
}
36
36
for (i in size - 1 downTo 1 ) {
37
- tree[i]!! [YY ] = max(
38
- (tree[2 * i]!! [YY ] + tree[2 * i + 1 ]!! [NY ]),
37
+ tree[i][YY ] = max(
38
+ (tree[2 * i][YY ] + tree[2 * i + 1 ][NY ]),
39
39
(
40
- tree[2 * i]!! [YN ] + max(
41
- tree[2 * i + 1 ]!! [YY ],
42
- tree[2 * i + 1 ]!! [NY ],
40
+ tree[2 * i][YN ] + max(
41
+ tree[2 * i + 1 ][YY ],
42
+ tree[2 * i + 1 ][NY ],
43
43
)
44
44
),
45
45
)
46
- tree[i]!! [YN ] = max(
47
- (tree[2 * i]!! [YY ] + tree[2 * i + 1 ]!! [NN ]),
46
+ tree[i][YN ] = max(
47
+ (tree[2 * i][YY ] + tree[2 * i + 1 ][NN ]),
48
48
(
49
- tree[2 * i]!! [YN ] + max(
50
- tree[2 * i + 1 ]!! [YN ],
51
- tree[2 * i + 1 ]!! [NN ],
49
+ tree[2 * i][YN ] + max(
50
+ tree[2 * i + 1 ][YN ],
51
+ tree[2 * i + 1 ][NN ],
52
52
)
53
53
),
54
54
)
55
- tree[i]!! [NY ] = max(
56
- (tree[2 * i]!! [NY ] + tree[2 * i + 1 ]!! [NY ]),
55
+ tree[i][NY ] = max(
56
+ (tree[2 * i][NY ] + tree[2 * i + 1 ][NY ]),
57
57
(
58
- tree[2 * i]!! [NN ] + max(
59
- tree[2 * i + 1 ]!! [YY ],
60
- tree[2 * i + 1 ]!! [NY ],
58
+ tree[2 * i][NN ] + max(
59
+ tree[2 * i + 1 ][YY ],
60
+ tree[2 * i + 1 ][NY ],
61
61
)
62
62
),
63
63
)
64
- tree[i]!! [NN ] = max(
65
- (tree[2 * i]!! [NY ] + tree[2 * i + 1 ]!! [NN ]),
64
+ tree[i][NN ] = max(
65
+ (tree[2 * i][NY ] + tree[2 * i + 1 ][NN ]),
66
66
(
67
- tree[2 * i]!! [NN ] + max(
68
- tree[2 * i + 1 ]!! [YN ],
69
- tree[2 * i + 1 ]!! [NN ],
67
+ tree[2 * i][NN ] + max(
68
+ tree[2 * i + 1 ][YN ],
69
+ tree[2 * i + 1 ][NN ],
70
70
)
71
71
),
72
72
)
73
73
}
74
74
return tree
75
75
}
76
76
77
- private fun set (tree : Array <LongArray ? >, idx : Int , `val `: Int ): Long {
77
+ private fun set (tree : Array <LongArray >, idx : Int , `val `: Int ): Long {
78
78
val size = tree.size / 2
79
- tree[size + idx]!! [YY ] = `val `.toLong()
79
+ tree[size + idx][YY ] = `val `.toLong()
80
80
var i = (size + idx) / 2
81
81
while (i > 0 ) {
82
- tree[i]!! [YY ] = max(
83
- (tree[2 * i]!! [YY ] + tree[2 * i + 1 ]!! [NY ]),
82
+ tree[i][YY ] = max(
83
+ (tree[2 * i][YY ] + tree[2 * i + 1 ][NY ]),
84
84
(
85
- tree[2 * i]!! [YN ] + max(
86
- tree[2 * i + 1 ]!! [YY ],
87
- tree[2 * i + 1 ]!! [NY ],
85
+ tree[2 * i][YN ] + max(
86
+ tree[2 * i + 1 ][YY ],
87
+ tree[2 * i + 1 ][NY ],
88
88
)
89
89
),
90
90
)
91
- tree[i]!! [YN ] = max(
92
- (tree[2 * i]!! [YY ] + tree[2 * i + 1 ]!! [NN ]),
91
+ tree[i][YN ] = max(
92
+ (tree[2 * i][YY ] + tree[2 * i + 1 ][NN ]),
93
93
(
94
- tree[2 * i]!! [YN ] + max(
95
- tree[2 * i + 1 ]!! [YN ],
96
- tree[2 * i + 1 ]!! [NN ],
94
+ tree[2 * i][YN ] + max(
95
+ tree[2 * i + 1 ][YN ],
96
+ tree[2 * i + 1 ][NN ],
97
97
)
98
98
),
99
99
)
100
- tree[i]!! [NY ] = max(
101
- (tree[2 * i]!! [NY ] + tree[2 * i + 1 ]!! [NY ]),
100
+ tree[i][NY ] = max(
101
+ (tree[2 * i][NY ] + tree[2 * i + 1 ][NY ]),
102
102
(
103
- tree[2 * i]!! [NN ] + max(
104
- tree[2 * i + 1 ]!! [YY ],
105
- tree[2 * i + 1 ]!! [NY ],
103
+ tree[2 * i][NN ] + max(
104
+ tree[2 * i + 1 ][YY ],
105
+ tree[2 * i + 1 ][NY ],
106
106
)
107
107
),
108
108
)
109
- tree[i]!! [NN ] = max(
110
- (tree[2 * i]!! [NY ] + tree[2 * i + 1 ]!! [NN ]),
109
+ tree[i][NN ] = max(
110
+ (tree[2 * i][NY ] + tree[2 * i + 1 ][NN ]),
111
111
(
112
- tree[2 * i]!! [NN ] + max(
113
- tree[2 * i + 1 ]!! [YN ],
114
- tree[2 * i + 1 ]!! [NN ],
112
+ tree[2 * i][NN ] + max(
113
+ tree[2 * i + 1 ][YN ],
114
+ tree[2 * i + 1 ][NN ],
115
115
)
116
116
),
117
117
)
118
118
i / = 2
119
119
}
120
120
return max(
121
- tree[1 ]!! [YY ],
122
- max(tree[1 ]!! [YN ], max(tree[1 ]!! [NY ], tree[1 ]!! [NN ])),
121
+ tree[1 ][YY ],
122
+ max(tree[1 ][YN ], max(tree[1 ][NY ], tree[1 ][NN ])),
123
123
)
124
124
}
125
125
}
0 commit comments