Problem Statement
John is going to sort a sequence of numbers using a special algorithm. First all numbers a[0], a[1], a[2], ..., a[n-1] are written on a blackboard. During the first iteration, John checks all numbers in the order of increasing indices (so, he checks a[0] first, followed by a[1], a[2],..., and ends the first iteration with a[n - 1]). At any moment, he can erase the number he is looking at from the blackboard and write it into his notebook. When looking at number a[i], John erases it from the board and writes into his notebook if and only if it is equal to the smallest unerased number on the blackboard. All other iterations are similar to the first one, but, of course, John checks only the numbers which were not erased from the blackboard. The process is over when all numbers are erased from the board and written into John's notebook in non-descending order.
For example, if John is given a sequence of {3, 5, 1, 4, 2}, the process will go as follows. During the first iteration, John will erase 1 and 2 from the board, writing them to the notebook and changing the sequence to {3, 5, 4}. During the second iteration, 3 and 4 will be written into his notebook, so only 5 will be on the board during the third iteration.
You will be given four
- a[0] = a0;
- a[i] = (a[i - 1] * X + Y) mod M, for 0 < i < n (where mod is a remainder operation.).
Definition
- Class:
- SortingInIterations
- Method:
- sum
- Parameters:
- int, int, int, int, int, int, int
- Returns:
- long
- Method signature:
- long sum(int a0, int X, int Y, int M, int n, int start, int finish)
- (be sure your method is public)
Constraints
- a0 will be between 0 and M-1, inclusive.
- X will be between 0 and 4*10^5, inclusive.
- Y will be between 0 and 4*10^5, inclusive.
- M will be between 1 and 4*10^5, inclusive.
- n will be between 1 and 4*10^5, inclusive.
- start will be between 1 and 4*10^5, inclusive.
- finish will be between start and 4*10^5, inclusive.
Examples
4
2
0
7
10
1
1
Returns: 5
The sequence is 4 1 2 4 1 2 4 1 2 4. The bolded elements will be erased during the first iteration.
1
0
0
5
5
1
2
Returns: 1
The sequence is 1, 0, 0, 0, 0. We need two iterations to erase all numbers.
7
6
9
10
10
2
3
Returns: 20
0
1
1
100000
100000
1
1
Returns: 4999950000
Be careful with overflows.
399999
1
399999
400000
400000
1
400000
Returns: 79999800000
2
1
400000
3
3
1
3
Returns: -1
0
1
399999
400000
400000
1
399999
Returns: 79999800000
1111
1821
0
394712
400000
1
16103
Returns: 78971897392
1111
1821
0
394712
400000
1
16104
Returns: -1
1
7
0
10
10
1
10
Returns: -1
John needs only four iterations.
0
0
0
1
1
1
1
Returns: 0
0
1
1
2
3
1
2
Returns: 1
2
1
2
3
1
1
1
Returns: 2
3
2
2
4
7
1
1
Returns: 10
0
4
1
5
1
1
1
Returns: 0
4
1
3
6
3
1
2
Returns: 9
5
5
0
7
5
1
3
Returns: 20
4
1
6
8
11
1
2
Returns: 6
8
4
1
9
1
1
1
Returns: 8
9
9
0
10
19
2
2
Returns: 81
4
8
4
11
21
2
4
Returns: 27
5
4
7
12
9
1
2
Returns: 35
2
3
12
13
15
1
2
Returns: 20
0
0
5
14
1
1
1
Returns: 0
8
6
13
15
1
1
1
Returns: 8
2
3
3
16
21
3
4
Returns: 35
3
16
9
17
19
1
2
Returns: 84
9
8
4
18
29
1
3
Returns: 65
12
5
3
19
33
2
7
Returns: 280
16
2
18
20
39
1
4
Returns: 476
17
17
9
21
3
1
2
Returns: 35
2
11
4
22
15
1
1
Returns: 58
8
3
21
23
45
6
7
Returns: 127
22
8
3
24
43
1
3
Returns: 652
19
2
21
25
17
3
4
Returns: 153
0
8
8
26
5
2
3
Returns: 40
9
9
14
27
25
1
1
Returns: 115
26
0
18
28
15
1
2
Returns: 278
16
1
10
29
21
1
4
Returns: 290
17
17
6
30
55
2
2
Returns: 186
16
2
4
31
57
2
4
Returns: 307
20
12
9
32
13
2
3
Returns: 66
27
18
5
33
31
5
6
Returns: 105
21
6
2
34
21
2
8
Returns: 223
12
31
5
35
55
2
6
Returns: 860
23
12
14
36
29
2
2
Returns: 23
10
29
4
37
61
5
6
Returns: 204
30
33
16
38
71
3
8
Returns: 276
18
31
11
39
9
1
3
Returns: 81
8
22
10
40
7
1
4
Returns: 136
35
38
6
41
75
4
5
Returns: 456
4
16
23
42
25
1
3
Returns: 460
40
4
14
43
5
1
1
Returns: 18
43
7
6
44
67
1
1
Returns: 2881
27
18
9
45
79
1
3
Returns: 756
15
28
8
46
39
5
10
Returns: 305
35
27
9
47
11
4
5
Returns: 125
4
47
24
48
13
1
1
Returns: 28
48
44
16
49
7
1
5
Returns: 197
46
38
34
50
33
5
11
Returns: 602
0
1
3
4
2
1
1
Returns: 3
99
25
43
128
83
18
29
Returns: 1622
373
69
845
972
530
3
6
Returns: 282696
3269
618
428
4096
1868
3
6
Returns: 4390991
113
328
10183
12500
7280
127
594
Returns: 3576220
30262
311
9523
31104
13537
846
1676
Returns: 80790161
45584
4458
41823
67228
45546
12
35
Returns: 181959021
29200
82145
61186
131072
14786
1633
1684
Returns: 2685148
90665
185646
26758
236196
165890
2
4
Returns: 403861
164004
7593
131074
400000
125378
530
6641
Returns: 18327888732
34350
378871
42025
399918
399947
21538
82765
Returns: 66737757896
330576
259323
386796
399948
399952
6519
14362
Returns: 49002314808
9854
88084
293687
399983
399932
34644
110571
Returns: 22033068663
120806
247558
46890
399903
399915
3
5
Returns: 52777314742
201329
206570
258757
399982
399935
9072
10192
Returns: 14372722031
393052
336095
228088
399943
399917
271
1318
Returns: 18086972990
93519
53181
258529
399969
399952
217
1173
Returns: 19545631635
239905
206943
18590
399901
399945
27672
112952
Returns: 46477317751
64037
74677
367827
399915
399951
10040
11753
Returns: 9899490665
367080
387806
78801
399901
399940
5767
57166
Returns: 36957050290
53734
109483
23370
142356
399990
3097
5973
Returns: 5387586990
215420
100023
74241
255104
399995
3002
6311
Returns: 25265929051
164203
140551
13308
333432
399976
126
200
Returns: 37583406767
15431
9685
50150
78900
399978
21
755
Returns: 14571208766
38065
318847
262539
335904
399988
342
906
Returns: 35239142179
17321
4017
193624
389798
399985
64
29862
Returns: 71567389737
264164
89145
213147
293066
399978
173
1359
Returns: 46764056682
174702
131049
185124
258766
400000
18753
25241
Returns: 15710241558
114947
92023
104795
253379
399980
71692
91872
Returns: 14897626614
30650
22487
27855
68795
399996
1063
1755
Returns: 5027565685
9163
109094
169973
384724
399984
3779
14176
Returns: 41019787654
167468
371466
64737
376891
400000
30376
55257
Returns: 48208623885
10055
6539
2932
13031
399977
273
5942
Returns: 2280507058
71188
124090
21789
167849
399997
12
4575
Returns: 27275087084
110536
55944
111882
114031
399997
10237
51195
Returns: 20511712283
165133
244450
136395
253738
399998
180
1078
Returns: 41588436487
23816
3165
510
28750
399997
11
22
Returns: 4575743966
87833
22847
10436
119226
399977
36
121
Returns: 14009633737
116952
8792
111257
231300
399991
417
1164
Returns: 33226235298
52623
247440
255725
260363
399981
111243
156784
Returns: 25332699741
4043
164978
35992
171399
399996
1
3029
Returns: 34324519467
206102
222124
251359
325138
399978
1
50399
Returns: -1
2387
69945
53541
114656
399994
1
53172
Returns: -1
25001
259998
186650
362312
399986
1
42682
Returns: 72470042477
2615
8348
6990
9727
399992
1
477
Returns: -1
189745
160113
41452
250821
399989
1
71
Returns: -1
31866
13215
22159
32283
399995
1
1678
Returns: -1
74178
28273
84720
106441
399993
1
25724
Returns: 21342248128
43789
221360
3989
233642
399994
1
2067
Returns: 46273411174
146506
261554
72561
357433
399986
1
41879
Returns: 71264535579
13528
274373
166912
399981
400000
1
14540
Returns: 79648731281
296690
59858
98937
399959
400000
1
27521
Returns: 80008014783
94158
218925
272788
399921
400000
1
60493
Returns: -1
164671
273094
120825
399908
400000
1
280
Returns: 82766772232
299920
155444
63344
399933
400000
1
1797
Returns: 81952604782
261258
16425
310134
399994
400000
1
27550
Returns: 79997975158
311021
76384
204827
399935
400000
1
37999
Returns: -1
250607
127702
349986
399928
400000
1
46869
Returns: -1
262079
176283
369407
399922
400000
1
87483
Returns: 80067531370
301261
220712
157246
399905
400000
1
400000
Returns: -1
1
1
399999
400000
400000
1
399999
Returns: 79999800000
399999
1
399999
400000
400000
3
400000
Returns: 79999799999
399980
400000
400000
399990
100000
1
2
Returns: 17223340
123456
123456
333333
400000
400000
3
2000
Returns: 33005146750
4444
299999
399999
400000
400000
2
3
Returns: 10000245555
1
2
3
399999
400000
1
100000
Returns: -1
234567
322544
234234
398237
400000
100
200
Returns: 142991
39999
99999
49999
99999
99999
1
1
Returns: 4999840001
12345
14345
23456
300000
400000
3
15
Returns: -1
399999
398765
387654
400000
400000
1
10
Returns: 1835210022
399999
399999
123345
400000
400000
1
200
Returns: -1
1
1
1
100000
400000
1
60000
Returns: 12799680002
399997
399991
399989
399999
400000
10
15
Returns: 3398730
16
624
1383
549
1346
473
476
Returns: -1
111
831
419
705
1162
66
111
Returns: 268570