Group by sum Sergey Svistunov

Aggregate 125,000,000 key/value records by key as fast as possible.

The task is equivalent to this query:

SELECT SUM(s * s) FROM (
    SELECT SUM(value) AS s FROM records GROUP BY key
)

Input

Exactly 125,000,000 records on STDIN, 8 bytes each, back to back (1,000,000,000 bytes in total):

Offset Type Field
0 uint32 little-endian key
4 uint32 little-endian value

Guarantees:

  • The records contain exactly 4,000,000 distinct keys.
  • A key is an arbitrary value in [0, 2^32) and may repeat any number of times.
  • A value is an arbitrary value in [0, 2^32).

Output

Group the records by key, sum the values of each group, then write the sum of the squares of those group sums to STDOUT as a decimal string:

answer = SUM(sum_k * sum_k) over all 4,000,000 distinct keys k

Both the squaring and the outer sum are computed modulo 2^64 (unsigned 64-bit wraparound). An individual group sum never overflows uint64.

Example

For the six records

key=7 value=10
key=3 value=4000000000
key=7 value=20
key=9 value=1
key=3 value=4000000000
key=7 value=30

the group sums are sum_7 = 60, sum_3 = 8000000000 and sum_9 = 1, so

60*60 + 8000000000*8000000000 + 1*1 = 64000000000000003601
64000000000000003601 mod 2^64       = 8659767778871348753

and the program prints 8659767778871348753.

Date AuthorLanguageStatus Score
Oct 9, 2026 23:44highload-churnerhighload-churnerCPPg++14.2.0Success5,923
Oct 9, 2026 23:42highload-churnerhighload-churnerCPPg++14.2.0Success5,883
Oct 9, 2026 23:36highload-churnerhighload-churnerCPPg++14.2.0Success6,065
Oct 9, 2026 23:04highload-churnerhighload-churnerCPPg++14.2.0Success5,770+3.30 RP
Oct 9, 2026 22:59highload-churnerhighload-churnerCPPg++14.2.0Success6,015
Oct 9, 2026 22:58highload-churnerhighload-churnerCPPg++14.2.0Success6,074
Oct 9, 2026 22:46highload-churnerhighload-churnerCPPg++14.2.0Success5,781+2.09 RP
Oct 9, 2026 22:26highload-churnerhighload-churnerCPPg++14.2.0Success6,951
Oct 9, 2026 22:19janwwwjanwwwCPPg++14.2.0Success3,345+2'873.37 RP
Oct 9, 2026 22:16highload-churnerhighload-churnerCPPg++14.2.0Success6,583
Oct 9, 2026 21:49highload-churnerhighload-churnerCPPg++14.2.0Success7,570
Oct 9, 2026 21:43highload-churnerhighload-churnerCPPg++14.2.0Success6,552
Oct 9, 2026 21:38highload-churnerhighload-churnerCPPg++14.2.0Success5,788+202.39 RP
Oct 9, 2026 21:27highload-churnerhighload-churnerCPPg++14.2.0Success6,614
Oct 9, 2026 21:27highload-churnerhighload-churnerCPPg++14.2.0Success6,645
Oct 9, 2026 21:20highload-churnerhighload-churnerCPPg++14.2.0Success6,658
Oct 9, 2026 20:28highload-churnerhighload-churnerCPPg++14.2.0Success6,556+167.92 RP
Oct 9, 2026 20:22highload-churnerhighload-churnerCPPclang++18.1.3Success7,378
Oct 9, 2026 17:22Karthik ReddyKarthik ReddyGOgo1.26.2Success2,394
Oct 9, 2026 17:22Karthik ReddyKarthik ReddyZIG0.15.1Success2,376
Oct 9, 2026 17:21Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,368
Oct 9, 2026 15:40Karthik ReddyKarthik ReddyGOgo1.26.2Success2,380
Oct 9, 2026 15:40Karthik ReddyKarthik ReddyZIG0.15.1Success2,399
Oct 9, 2026 15:40Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,407
Oct 9, 2026 14:38highload-churnerhighload-churnerCPPg++14.2.0Success7,460
Oct 9, 2026 14:38highload-churnerhighload-churnerCPPg++14.2.0Success7,367+1'357.40 RP
Oct 9, 2026 14:27Karthik ReddyKarthik ReddyGOgo1.26.2Success2,375
Oct 9, 2026 14:27Karthik ReddyKarthik ReddyZIG0.15.1Success2,385
Oct 9, 2026 14:27Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,378
Oct 9, 2026 13:30Karthik ReddyKarthik ReddyGOgo1.26.2Success2,377
Oct 9, 2026 13:30Karthik ReddyKarthik ReddyZIG0.15.1Success2,387
Oct 9, 2026 13:29Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,376
Oct 9, 2026 12:41Karthik ReddyKarthik ReddyGOgo1.26.2Success2,379
Oct 9, 2026 12:41Karthik ReddyKarthik ReddyZIG0.15.1Success2,379
Oct 9, 2026 12:41Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,374
Oct 9, 2026 12:38Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,383
Oct 9, 2026 11:37Karthik ReddyKarthik ReddyGOgo1.26.2Success2,372
Oct 9, 2026 11:37Karthik ReddyKarthik ReddyZIG0.15.1Success2,379
Oct 9, 2026 11:37Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,371
Oct 9, 2026 10:41Karthik ReddyKarthik ReddyGOgo1.26.2Success2,379
Oct 9, 2026 10:41Karthik ReddyKarthik ReddyZIG0.15.1Success2,374
Oct 9, 2026 10:41Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,372
Oct 9, 2026 10:19Karthik ReddyKarthik ReddyZIG0.15.1Success2,383
Oct 9, 2026 10:18Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,382
Oct 9, 2026 09:15Karthik ReddyKarthik ReddyGOgo1.26.2Success2,372
Oct 9, 2026 08:50Karthik ReddyKarthik ReddyZIG0.15.1Success2,381
Oct 9, 2026 08:48Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,373
Oct 9, 2026 08:15Karthik ReddyKarthik ReddyGOgo1.26.2Error
Oct 9, 2026 08:12Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,397
Oct 9, 2026 07:56Karthik ReddyKarthik ReddyZIG0.15.1Success2,368
Oct 9, 2026 07:32Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,382
Oct 9, 2026 07:11Karthik ReddyKarthik ReddyRUSTrust-1.95.0Success2,408
Oct 6, 2026 09:32janwwwjanwwwCPPg++14.2.0Success86,085+116.16 RP
Oct 5, 2026 06:39Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,337+38.28 RP
Oct 5, 2026 06:34Karthik ReddyKarthik ReddyCPPg++14.2.0Success2,422
Oct 5, 2026 06:24Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,351
Oct 5, 2026 06:19Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,348+90.54 RP
Oct 5, 2026 06:06Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,399+152.34 RP
Oct 5, 2026 06:01Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 05:51Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,490+71.29 RP
Oct 5, 2026 05:42Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,535+161.19 RP
Oct 5, 2026 05:34Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,643+245.01 RP
Oct 5, 2026 05:32Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 05:22Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,826+24.87 RP
Oct 5, 2026 05:14Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 05:13Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 05:13Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 05:12Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 05:12Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 05:08Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 04:57Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 04:54Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,846+33.02 RP
Oct 5, 2026 04:47Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 04:05Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,873+8.46 RP
Oct 5, 2026 01:09Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 01:06Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,880+90.42 RP
Oct 5, 2026 00:57Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,957+42.91 RP
Oct 5, 2026 00:52Karthik ReddyKarthik ReddyCPPclang++18.1.3Success2,995+68.79 RP
Oct 5, 2026 00:44Karthik ReddyKarthik ReddyCPPclang++18.1.3Success4,008
Oct 5, 2026 00:42Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 5, 2026 00:40Karthik ReddyKarthik ReddyCPPclang++18.1.3Success3,890
Oct 4, 2026 16:05Karthik ReddyKarthik ReddyCPPclang++18.1.3Success3,058+753.12 RP
Oct 4, 2026 16:01Karthik ReddyKarthik ReddyCPPclang++18.1.3Success3,973+96.27 RP
Oct 4, 2026 15:56Karthik ReddyKarthik ReddyCPPclang++18.1.3Success4,131+2'420.72 RP
Oct 4, 2026 15:17Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 4, 2026 15:16Karthik ReddyKarthik ReddyCPPclang++18.1.3Error
Oct 3, 2026 07:35Karthik ReddyKarthik ReddyCPPg++14.2.0Error
Oct 3, 2026 07:34Karthik ReddyKarthik ReddyCPPg++14.2.0Error
Oct 3, 2026 07:33Karthik ReddyKarthik ReddyCPPg++14.2.0Error
Oct 2, 2026 07:31Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success79,189
Oct 2, 2026 07:30Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success37,345
Oct 2, 2026 07:15Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success47,334
Oct 2, 2026 07:15Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success49,378
Oct 2, 2026 07:14Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success47,855
Oct 2, 2026 07:08Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success35,702
Oct 2, 2026 07:04Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success28,146
Oct 2, 2026 07:02Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success48,033
Oct 2, 2026 06:58Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success37,118
Oct 2, 2026 06:53Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success48,666
Oct 2, 2026 06:32Andrew EpsteinAndrew EpsteinCPPclang++20.1.2Success72,588