File tree 3 files changed +183
-0
lines changed
3 files changed +183
-0
lines changed Original file line number Diff line number Diff line change @@ -239,6 +239,68 @@ func bestSeqAtIndex(height []int, weight []int) int {
239
239
}
240
240
```
241
241
242
+ ``` swift
243
+ class BinaryIndexedTree {
244
+ private var n: Int
245
+ private var c: [Int ]
246
+
247
+ init (_ n : Int ) {
248
+ self .n = n
249
+ self .c = [Int ](repeating : 0 , count : n + 1 )
250
+ }
251
+
252
+ func update (_ x : Int , _ val : Int ) {
253
+ var x = x
254
+ while x <= n {
255
+ c[x] = max (c[x], val)
256
+ x += x & - x
257
+ }
258
+ }
259
+
260
+ func query (_ x : Int ) -> Int {
261
+ var x = x
262
+ var s = 0
263
+ while x > 0 {
264
+ s = max (s, c[x])
265
+ x -= x & - x
266
+ }
267
+ return s
268
+ }
269
+ }
270
+
271
+ class Solution {
272
+ func bestSeqAtIndex (_ height : [Int ], _ weight : [Int ]) -> Int {
273
+ let n = height.count
274
+ var arr: [(Int , Int )] = []
275
+ for i in 0 ..< n {
276
+ arr.append ((height[i], weight[i]))
277
+ }
278
+ arr.sort {
279
+ if $0 .0 == $1 .0 {
280
+ return $1 .1 < $0 .1
281
+ }
282
+ return $0 .0 < $1 .0
283
+ }
284
+
285
+ let weights = Set (arr.map { $1 })
286
+ let sortedWeights = Array (weights).sorted ()
287
+ let m = sortedWeights.enumerated ().reduce (into : [Int : Int ]()) {
288
+ $0 [$1 .element ] = $1 .offset + 1
289
+ }
290
+
291
+ let tree = BinaryIndexedTree (sortedWeights.count )
292
+ var ans = 1
293
+ for (_ , w) in arr {
294
+ let x = m[w]!
295
+ let t = tree.query (x - 1 ) + 1
296
+ ans = max (ans, t)
297
+ tree.update (x, t)
298
+ }
299
+ return ans
300
+ }
301
+ }
302
+ ```
303
+
242
304
<!-- tabs:end -->
243
305
244
306
<!-- end -->
Original file line number Diff line number Diff line change @@ -242,6 +242,68 @@ func bestSeqAtIndex(height []int, weight []int) int {
242
242
}
243
243
```
244
244
245
+ ``` swift
246
+ class BinaryIndexedTree {
247
+ private var n: Int
248
+ private var c: [Int ]
249
+
250
+ init (_ n : Int ) {
251
+ self .n = n
252
+ self .c = [Int ](repeating : 0 , count : n + 1 )
253
+ }
254
+
255
+ func update (_ x : Int , _ val : Int ) {
256
+ var x = x
257
+ while x <= n {
258
+ c[x] = max (c[x], val)
259
+ x += x & - x
260
+ }
261
+ }
262
+
263
+ func query (_ x : Int ) -> Int {
264
+ var x = x
265
+ var s = 0
266
+ while x > 0 {
267
+ s = max (s, c[x])
268
+ x -= x & - x
269
+ }
270
+ return s
271
+ }
272
+ }
273
+
274
+ class Solution {
275
+ func bestSeqAtIndex (_ height : [Int ], _ weight : [Int ]) -> Int {
276
+ let n = height.count
277
+ var arr: [(Int , Int )] = []
278
+ for i in 0 ..< n {
279
+ arr.append ((height[i], weight[i]))
280
+ }
281
+ arr.sort {
282
+ if $0 .0 == $1 .0 {
283
+ return $1 .1 < $0 .1
284
+ }
285
+ return $0 .0 < $1 .0
286
+ }
287
+
288
+ let weights = Set (arr.map { $1 })
289
+ let sortedWeights = Array (weights).sorted ()
290
+ let m = sortedWeights.enumerated ().reduce (into : [Int : Int ]()) {
291
+ $0 [$1 .element ] = $1 .offset + 1
292
+ }
293
+
294
+ let tree = BinaryIndexedTree (sortedWeights.count )
295
+ var ans = 1
296
+ for (_ , w) in arr {
297
+ let x = m[w]!
298
+ let t = tree.query (x - 1 ) + 1
299
+ ans = max (ans, t)
300
+ tree.update (x, t)
301
+ }
302
+ return ans
303
+ }
304
+ }
305
+ ```
306
+
245
307
<!-- tabs:end -->
246
308
247
309
<!-- end -->
Original file line number Diff line number Diff line change
1
+ class BinaryIndexedTree {
2
+ private var n : Int
3
+ private var c : [ Int ]
4
+
5
+ init ( _ n: Int ) {
6
+ self . n = n
7
+ self . c = [ Int] ( repeating: 0 , count: n + 1 )
8
+ }
9
+
10
+ func update( _ x: Int , _ val: Int ) {
11
+ var x = x
12
+ while x <= n {
13
+ c [ x] = max ( c [ x] , val)
14
+ x += x & - x
15
+ }
16
+ }
17
+
18
+ func query( _ x: Int ) -> Int {
19
+ var x = x
20
+ var s = 0
21
+ while x > 0 {
22
+ s = max ( s, c [ x] )
23
+ x -= x & - x
24
+ }
25
+ return s
26
+ }
27
+ }
28
+
29
+ class Solution {
30
+ func bestSeqAtIndex( _ height: [ Int ] , _ weight: [ Int ] ) -> Int {
31
+ let n = height. count
32
+ var arr : [ ( Int , Int ) ] = [ ]
33
+ for i in 0 ..< n {
34
+ arr. append ( ( height [ i] , weight [ i] ) )
35
+ }
36
+ arr. sort {
37
+ if $0. 0 == $1. 0 {
38
+ return $1. 1 < $0. 1
39
+ }
40
+ return $0. 0 < $1. 0
41
+ }
42
+
43
+ let weights = Set ( arr. map { $1 } )
44
+ let sortedWeights = Array ( weights) . sorted ( )
45
+ let m = sortedWeights. enumerated ( ) . reduce ( into: [ Int: Int] ( ) ) {
46
+ $0 [ $1. element] = $1. offset + 1
47
+ }
48
+
49
+ let tree = BinaryIndexedTree ( sortedWeights. count)
50
+ var ans = 1
51
+ for (_, w) in arr {
52
+ let x = m [ w] !
53
+ let t = tree. query ( x - 1 ) + 1
54
+ ans = max ( ans, t)
55
+ tree. update ( x, t)
56
+ }
57
+ return ans
58
+ }
59
+ }
You can’t perform that action at this time.
0 commit comments