Submission details
Task:Kaaleppi's run
Sender:Tuukka Korhonen
Submission time:2016-10-04 18:32:40 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.37 sdetails
#2ACCEPTED0.48 sdetails
#3ACCEPTED0.41 sdetails
#4ACCEPTED0.33 sdetails
#5ACCEPTED0.42 sdetails
#6ACCEPTED0.21 sdetails
#7ACCEPTED0.30 sdetails
#8ACCEPTED0.10 sdetails
#9ACCEPTED0.53 sdetails
#10ACCEPTED0.34 sdetails
#11ACCEPTED0.56 sdetails
#12ACCEPTED0.56 sdetails
#13ACCEPTED0.58 sdetails
#14ACCEPTED0.55 sdetails
#15ACCEPTED0.59 sdetails
#16ACCEPTED0.55 sdetails
#17ACCEPTED0.58 sdetails
#18ACCEPTED0.54 sdetails
#19ACCEPTED0.52 sdetails
#20ACCEPTED0.52 sdetails
#21ACCEPTED0.58 sdetails
#22ACCEPTED0.54 sdetails
#23ACCEPTED0.57 sdetails
#24ACCEPTED0.58 sdetails
#25ACCEPTED0.55 sdetails
#26ACCEPTED0.54 sdetails
#27ACCEPTED0.60 sdetails
#28ACCEPTED0.52 sdetails
#29ACCEPTED0.56 sdetails
#30ACCEPTED0.56 sdetails

Code

#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define N (1<<18)

using namespace std;

ll v[2 * N];
ll w[2 * N];

void setv (int k, ll n) {
  k += N;
  w[k] = v[k] = n;
  for (k /= 2; k >= 1; k /= 2) {
    v[k] = v[2 * k] + v[2 * k + 1];
    w[k] = max(w[2 * k], w[2 * k + 1]);
  }
}

ll sum (int a, int b) {
  a += N;
  b += N;
  ll s = 0;
  while (a <= b) {
    if (a % 2) s += v[a++];
    if (b % 2 == 0) s += v[b--];
    a /= 2; b /= 2;
  }
  return s;
}

void rage (int a, int b, int i, int l, int r, ll m) {
  if (b < l || a > r) return;
  //cout<<"QUERY1 "<<a<<" "<<b<<" "<<i<<" "<<w[i]<<endl;
  if (w[i] < m) return;
  //cout<<"QUERY2 "<<a<<" "<<b<<endl;
  if (a == b) {
    //cout<<"SET "<<a<<" to "<<v[a + N]<<" % "<<m<<endl;
    setv(a, v[a + N] % m);
    return;
  }
  int q = r - l + 1;
  q /= 2;
  rage(a, min(r - q, b), 2 * i, l, r - q, m);
  rage(max(a, l + q), b, 2 * i + 1, l + q, r, m);
}

int main () {
  int n, q;
  cin>>n>>q;
  for (int i = 0; i < n; i++) {
    ll x;
    cin>>x;
    setv(i, x);
  }
  for (int i = 0; i < q; i++) {
    int t;
    cin>>t;
    if (t == 1) {
      ll a, b, c;
      cin>>a>>b>>c;
      rage(a - 1, b - 1, 1, 0, N - 1, c);
    } else {
      ll a, b;
      cin>>a>>b;
      cout<<sum(a - 1, b - 1)<<endl;
    }
  }
}

Test details

Test 1

Verdict: ACCEPTED

input
89384 130887
681692778 714636916 957747794 ...

correct output
3568050627345
4840079633895
4979742617229
3278015536236
8227531490884
...

user output
3568050627345
4840079633895
4979742617229
3278015536236
8227531490884
...

Test 2

Verdict: ACCEPTED

input
110132 199724
847570814 404978775 106367318 ...

correct output
1427981161528
6256316123063
1076159707539
1525408287745
12452883393272
...

user output
1427981161528
6256316123063
1076159707539
1525408287745
12452883393272
...

Test 3

Verdict: ACCEPTED

input
87738 181088
562855988 84781032 926253527 7...

correct output
5716947015138
14424560752621
3616168262601
807226877121
83465638349
...

user output
5716947015138
14424560752621
3616168262601
807226877121
83465638349
...

Test 4

Verdict: ACCEPTED

input
158114 63223
462120872 498977056 463223297 ...

correct output
49126485898374
2184603743669
23961846093944
2848201705457
1555275733993
...

user output
49126485898374
2184603743669
23961846093944
2848201705457
1555275733993
...

Test 5

Verdict: ACCEPTED

input
140966 138126
812693646 252682523 265941575 ...

correct output
22817793228905
17812780427335
2620152643855
2866263272648
5009940526564
...

user output
22817793228905
17812780427335
2620152643855
2866263272648
5009940526564
...

Test 6

Verdict: ACCEPTED

input
70958 64685
892097055 124053711 989231834 ...

correct output
460637799671
1475480287645
3957671266357
15189222079188
8068328407783
...

user output
460637799671
1475480287645
3957671266357
15189222079188
8068328407783
...

Test 7

Verdict: ACCEPTED

input
97044 123753
707926206 599809760 994891636 ...

correct output
30504891581
10585850358828
3752130598295
4274674534895
18961318419991
...

user output
30504891581
10585850358828
3752130598295
4274674534895
18961318419991
...

Test 8

Verdict: ACCEPTED

input
25458 9623
313230374 496638350 562858459 ...

correct output
348560018107
5323872135694
28101423541
5060603534783
8455422896644
...

user output
348560018107
5323872135694
28101423541
5060603534783
8455422896644
...

Test 9

Verdict: ACCEPTED

input
161390 197159
674040671 808300128 26080705 9...

correct output
6338494962280
9308586268339
1426570147836
619729941732
531996459059
...

user output
6338494962280
9308586268339
1426570147836
619729941732
531996459059
...

Test 10

Verdict: ACCEPTED

input
183342 96224
100979382 831921884 895353059 ...

correct output
4146493190203
29755052359871
21010351347658
4994403502744
4874048764601
...

user output
4146493190203
29755052359871
21010351347658
4994403502744
4874048764601
...

Test 11

Verdict: ACCEPTED

input
200000 200000
163516132 88718522 960501684 3...

correct output
8705161776177
16560680715170
4529140494185
22215511151267
307663601912
...

user output
8705161776177
16560680715170
4529140494185
22215511151267
307663601912
...

Test 12

Verdict: ACCEPTED

input
200000 200000
661328518 295428034 543539165 ...

correct output
44125316835086
12534063038672
13779878669135
1110457357385
53890550863397
...

user output
44125316835086
12534063038672
13779878669135
1110457357385
53890550863397
...

Test 13

Verdict: ACCEPTED

input
200000 200000
835492064 858947595 489705704 ...

correct output
7123736494948
18343643800481
4061553943570
22394824679259
17059560008797
...

user output
7123736494948
18343643800481
4061553943570
22394824679259
17059560008797
...

Test 14

Verdict: ACCEPTED

input
200000 200000
357734101 493956933 250155363 ...

correct output
19974989429712
60252072248233
45678027522989
9906096645143
5796576869969
...

user output
19974989429712
60252072248233
45678027522989
9906096645143
5796576869969
...

Test 15

Verdict: ACCEPTED

input
200000 200000
366056556 485208318 898983115 ...

correct output
18324415144074
1960721236822
262868810399
418650395034
4926733633202
...

user output
18324415144074
1960721236822
262868810399
418650395034
4926733633202
...

Test 16

Verdict: ACCEPTED

input
200000 200000
696545081 391575800 525194671 ...

correct output
464526195732
10421706643804
25715510077679
60768424352308
47109574794106
...

user output
464526195732
10421706643804
25715510077679
60768424352308
47109574794106
...

Test 17

Verdict: ACCEPTED

input
200000 200000
785409780 12543965 724522794 5...

correct output
76078073776916
12550437486909
1961851552333
3704172183345
958583269110
...

user output
76078073776916
12550437486909
1961851552333
3704172183345
958583269110
...

Test 18

Verdict: ACCEPTED

input
200000 200000
239188181 76186945 538812873 7...

correct output
9965856033901
22841982053808
20057247487740
22036414753777
743665836923
...

user output
9965856033901
22841982053808
20057247487740
22036414753777
743665836923
...

Test 19

Verdict: ACCEPTED

input
200000 200000
571088696 713137765 869808231 ...

correct output
27201871131366
1773925165749
21331314450495
44597922896
11839927329463
...

user output
27201871131366
1773925165749
21331314450495
44597922896
11839927329463
...

Test 20

Verdict: ACCEPTED

input
200000 200000
94357126 167500952 625424533 7...

correct output
19827596131079
1587873460955
56673140705204
1825224125411
14126369552503
...

user output
19827596131079
1587873460955
56673140705204
1825224125411
14126369552503
...

Test 21

Verdict: ACCEPTED

input
200000 200000
902289752 980717302 482700427 ...

correct output
42722728269555
32652085471516
7532635788308
26365360928406
31706902704494
...

user output
42722728269555
32652085471516
7532635788308
26365360928406
31706902704494
...

Test 22

Verdict: ACCEPTED

input
200000 200000
234861789 896308950 585257292 ...

correct output
23148184769579
6264813675999
47314176314048
17697735609162
2251160486380
...

user output
23148184769579
6264813675999
47314176314048
17697735609162
2251160486380
...

Test 23

Verdict: ACCEPTED

input
200000 200000
889896556 543224603 961078149 ...

correct output
1713650642846
35249443235523
9622564970592
20993151478096
559043197323
...

user output
1713650642846
35249443235523
9622564970592
20993151478096
559043197323
...

Test 24

Verdict: ACCEPTED

input
200000 200000
995332283 686573056 932431685 ...

correct output
12013196028573
47655633640876
18257672284868
27625651650511
46438192959164
...

user output
12013196028573
47655633640876
18257672284868
27625651650511
46438192959164
...

Test 25

Verdict: ACCEPTED

input
200000 200000
946315600 868557890 318443283 ...

correct output
1133762533395
57398145786924
869840469415
29146044858314
35199351262230
...

user output
1133762533395
57398145786924
869840469415
29146044858314
35199351262230
...

Test 26

Verdict: ACCEPTED

input
200000 200000
944060128 254626749 68890590 2...

correct output
11055994363482
2657055498612
30597070068344
7792687527844
7661261162964
...

user output
11055994363482
2657055498612
30597070068344
7792687527844
7661261162964
...

Test 27

Verdict: ACCEPTED

input
200000 200000
841299688 308557219 620166698 ...

correct output
19393456997210
195469629029
2786427435737
1993020037538
3164725175677
...

user output
19393456997210
195469629029
2786427435737
1993020037538
3164725175677
...

Test 28

Verdict: ACCEPTED

input
200000 200000
494252927 946174799 609845025 ...

correct output
15907022632481
27292668068962
441027352490
40834476272262
28481559993407
...

user output
15907022632481
27292668068962
441027352490
40834476272262
28481559993407
...

Test 29

Verdict: ACCEPTED

input
200000 200000
470856857 625269921 288612820 ...

correct output
2046228565150
3617420568401
1053973762226
5913120807902
5419236217968
...

user output
2046228565150
3617420568401
1053973762226
5913120807902
5419236217968
...

Test 30

Verdict: ACCEPTED

input
200000 200000
62623182 70087409 956344115 19...

correct output
28081481609073
287568565804
2709243279569
5210936812890
12514447288598
...

user output
28081481609073
287568565804
2709243279569
5210936812890
12514447288598
...