Order book Yuriy Lyfenko

Simulate a sell-side order book and calculate the cost of a final purchase as fast as possible.

Input

1,000,000 order updates on STDIN, one per line:

  • + <price> <size> – add a new sell order
  • - <position> – delete the order at the given position
  • = <size> – buy <size> shares from the top of the order book

After all updates are processed, buy 1,000 shares from the top of the order book.

Output

Print the total cost of the final 1,000-share purchase to STDOUT.

Order Book Rules

Orders are sorted by price ascending (lower is better). Orders at the same price are sorted by arrival time (earlier first). Position 0 is the best (lowest-price) offer.

The = (buy) operation consumes shares starting from position 0. If an order is fully consumed, it is removed from the book.

Example

Input Order book state
+ 1137 100 (1137,100)
+ 1130 10 (1130,10), (1137,100)
+ 1130 50 (1130,10), (1130,50), (1137,100)
- 0 (1130,50), (1137,100)
+ 1150 200 (1130,50), (1137,100), (1150,200)
= 200 (1150,150)

Total cost of the last buy: 50 * 1130 + 100 * 1137 + 50 * 1150.

Date AuthorLanguageStatus Score
Mar 26, 2024 20:00E SequeiraE SequeiraCPPg++9.4.0Success93,685
Mar 26, 2024 20:00E SequeiraE SequeiraCPPclang++10.0.0Success82,357+0.38 RP
Mar 26, 2024 19:59E SequeiraE SequeiraCPPclang++10.0.0Success82,629
Mar 26, 2024 19:58E SequeiraE SequeiraCPPclang++10.0.0Success83,376
Mar 26, 2024 19:58E SequeiraE SequeiraCPPclang++10.0.0Success83,536
Mar 26, 2024 19:53E SequeiraE SequeiraCPPclang++10.0.0Success84,288
Mar 26, 2024 17:43E SequeiraE SequeiraCPPclang++10.0.0Success83,699
Mar 26, 2024 17:41E SequeiraE SequeiraCPPclang++10.0.0Success83,593
Mar 26, 2024 17:40E SequeiraE SequeiraCPPclang++10.0.0Success83,390
Mar 26, 2024 17:37E SequeiraE SequeiraCPPclang++10.0.0Error
Mar 26, 2024 17:33E SequeiraE SequeiraCPPclang++10.0.0Success85,078
Mar 26, 2024 17:32E SequeiraE SequeiraCPPclang++10.0.0Success84,557
Mar 26, 2024 17:31E SequeiraE SequeiraCPPclang++10.0.0Error
Mar 26, 2024 17:31E SequeiraE SequeiraCPPclang++10.0.0Error
Mar 26, 2024 17:30E SequeiraE SequeiraCPPclang++10.0.0Success86,026
Mar 26, 2024 17:29E SequeiraE SequeiraCPPg++9.4.0Success95,294
Mar 26, 2024 17:27E SequeiraE SequeiraCPPg++9.4.0Success266,946
Mar 26, 2024 17:26E SequeiraE SequeiraCPPg++9.4.0Success266,782
Mar 26, 2024 17:26E SequeiraE SequeiraCPPclang++10.0.0Success265,422
Mar 26, 2024 17:16E SequeiraE SequeiraCPPclang++10.0.0Success82,867
Mar 26, 2024 17:16E SequeiraE SequeiraCPPclang++10.0.0Success101,550
Mar 26, 2024 17:14E SequeiraE SequeiraCPPclang++10.0.0Success101,784
Mar 26, 2024 16:54E SequeiraE SequeiraCPPg++9.4.0Success94,213
Mar 26, 2024 16:53E SequeiraE SequeiraCPPclang++10.0.0Success82,816
Mar 26, 2024 16:52E SequeiraE SequeiraCPPclang++10.0.0Success82,614+0.61 RP
Mar 26, 2024 16:52E SequeiraE SequeiraCPPclang++10.0.0Success83,210
Mar 26, 2024 16:51E SequeiraE SequeiraCPPclang++10.0.0Success83,033+0.69 RP
Mar 26, 2024 16:50E SequeiraE SequeiraCPPclang++10.0.0Success83,514+1.64 RP
Mar 26, 2024 16:49E SequeiraE SequeiraCPPclang++10.0.0Success84,957
Mar 26, 2024 16:47E SequeiraE SequeiraCPPg++9.4.0Success104,066
Mar 26, 2024 16:47E SequeiraE SequeiraCPPclang++10.0.0Success86,326
Mar 26, 2024 16:46E SequeiraE SequeiraCPPclang++10.0.0Success86,492
Mar 26, 2024 16:45E SequeiraE SequeiraCPPclang++10.0.0Success85,895
Mar 26, 2024 16:44E SequeiraE SequeiraCPPclang++10.0.0Success84,995
Mar 26, 2024 16:42E SequeiraE SequeiraCPPclang++10.0.0Success85,103
Mar 26, 2024 16:41E SequeiraE SequeiraCPPclang++10.0.0Success85,121
Mar 26, 2024 16:40E SequeiraE SequeiraCPPclang++10.0.0Success84,700
Mar 26, 2024 16:39E SequeiraE SequeiraCPPclang++10.0.0Success84,881
Mar 26, 2024 16:32E SequeiraE SequeiraCPPclang++10.0.0Success84,671+0.49 RP
Mar 26, 2024 16:31E SequeiraE SequeiraCPPclang++10.0.0Success85,021+21.32 RP
Mar 26, 2024 16:31E SequeiraE SequeiraCPPg++9.4.0Success104,886
Mar 26, 2024 16:30E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 16:27E SequeiraE SequeiraCPPg++9.4.0Success104,195
Mar 26, 2024 16:26E SequeiraE SequeiraCPPg++9.4.0Success103,843+0.26 RP
Mar 26, 2024 16:25E SequeiraE SequeiraCPPg++9.4.0Success104,121+22.06 RP
Mar 26, 2024 16:18E SequeiraE SequeiraCPPg++9.4.0Success135,172+0.07 RP
Mar 26, 2024 16:18E SequeiraE SequeiraCPPg++9.4.0Success135,293+0.21 RP
Mar 26, 2024 16:17E SequeiraE SequeiraCPPg++9.4.0Success135,674+3.84 RP
Mar 26, 2024 16:14E SequeiraE SequeiraCPPg++9.4.0Success143,141+0.02 RP
Mar 26, 2024 16:14E SequeiraE SequeiraCPPg++9.4.0Success143,341
Mar 26, 2024 16:13E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 16:13E SequeiraE SequeiraCPPg++9.4.0Success143,182+0.20 RP
Mar 26, 2024 16:13E SequeiraE SequeiraCPPg++9.4.0Success143,586+2.18 RP
Mar 26, 2024 16:09E SequeiraE SequeiraCPPg++9.4.0Success151,110
Mar 26, 2024 16:09E SequeiraE SequeiraCPPclang++10.0.0Success152,309
Mar 26, 2024 16:09E SequeiraE SequeiraCPPg++9.4.0Success150,737
Mar 26, 2024 16:06E SequeiraE SequeiraCPPg++9.4.0Success148,663
Mar 26, 2024 16:05E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 16:03E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 16:02E SequeiraE SequeiraCPPg++9.4.0Success148,219+0.97 RP
Mar 26, 2024 16:01E SequeiraE SequeiraCPPg++9.4.0Success150,386+0.13 RP
Mar 26, 2024 16:00E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 15:57E SequeiraE SequeiraCPPg++9.4.0Success150,690+0.06 RP
Mar 26, 2024 15:54E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 15:53E SequeiraE SequeiraCPPg++9.4.0Success150,817+0.83 RP
Mar 26, 2024 15:53E SequeiraE SequeiraCPPg++9.4.0Success152,718+0.69 RP
Mar 26, 2024 15:52E SequeiraE SequeiraCPPg++9.4.0Success154,739
Mar 26, 2024 15:50E SequeiraE SequeiraCPPg++9.4.0Success154,351+9.27 RP
Mar 26, 2024 15:32E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 15:28E SequeiraE SequeiraCPPg++9.4.0Success180,282
Mar 26, 2024 15:28E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 15:19E SequeiraE SequeiraCPPclang++10.0.0Success182,367
Mar 26, 2024 15:18E SequeiraE SequeiraCPPg++9.4.0Success181,100
Mar 26, 2024 15:17E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 15:16E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 15:08E SequeiraE SequeiraCPPg++9.4.0Success181,684
Mar 26, 2024 15:07E SequeiraE SequeiraCPPg++9.4.0Success180,501
Mar 26, 2024 15:05E SequeiraE SequeiraCPPg++9.4.0Success180,558
Mar 26, 2024 15:04E SequeiraE SequeiraCPPg++9.4.0Success181,974
Mar 26, 2024 15:04E SequeiraE SequeiraCPPg++9.4.0Success180,122+0.06 RP
Mar 26, 2024 15:03E SequeiraE SequeiraCPPg++9.4.0Success180,304
Mar 26, 2024 14:42E SequeiraE SequeiraCPPg++9.4.0Success180,302+0.10 RP
Mar 26, 2024 14:41E SequeiraE SequeiraCPPg++9.4.0Success180,634+14.17 RP
Mar 26, 2024 14:37E SequeiraE SequeiraCPPg++9.4.0Success246,659
Mar 26, 2024 14:36E SequeiraE SequeiraCPPg++9.4.0Success245,797
Mar 26, 2024 14:33E SequeiraE SequeiraCPPg++9.4.0Success244,611
Mar 26, 2024 14:33E SequeiraE SequeiraCPPg++9.4.0Success243,013
Mar 26, 2024 14:32E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 14:32E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 14:31E SequeiraE SequeiraCPPg++9.4.0Error
Mar 26, 2024 14:30E SequeiraE SequeiraCPPg++9.4.0Success242,798+0.15 RP
Mar 26, 2024 14:30E SequeiraE SequeiraCPPg++9.4.0Success245,933
Mar 26, 2024 14:30E SequeiraE SequeiraCPPg++9.4.0Success245,167
Mar 26, 2024 14:27E SequeiraE SequeiraCPPg++9.4.0Success243,803
Mar 26, 2024 14:26E SequeiraE SequeiraCPPg++9.4.0Success243,678+0.14 RP
Mar 26, 2024 14:26E SequeiraE SequeiraCPPg++9.4.0Success244,524+0.07 RP
Mar 26, 2024 14:23E SequeiraE SequeiraCPPg++9.4.0Success244,946
Mar 26, 2024 14:22E SequeiraE SequeiraCPPg++9.4.0Success244,962+0.11 RP
Mar 26, 2024 14:22E SequeiraE SequeiraCPPg++9.4.0Success252,381
Mar 26, 2024 14:21E SequeiraE SequeiraCPPg++9.4.0Success247,347