CSES - IZhO 2017, day 2 - Results
Submission details
Task:Simple game
Sender:Lieska
Submission time:2019-02-09 12:48:37 +0200
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED22
#2ACCEPTED27
#3ACCEPTED51
Test results
testverdicttimegroup
#1ACCEPTED0.02 s1, 3details
#2ACCEPTED0.02 s1, 3details
#3ACCEPTED0.03 s1, 3details
#4ACCEPTED0.04 s1, 3details
#5ACCEPTED0.04 s1, 3details
#6ACCEPTED0.03 s1, 3details
#7ACCEPTED0.03 s1, 2, 3details
#8ACCEPTED0.18 s2, 3details
#9ACCEPTED0.23 s2, 3details
#10ACCEPTED0.24 s2, 3details
#11ACCEPTED0.17 s2, 3details
#12ACCEPTED0.22 s2, 3details
#13ACCEPTED0.26 s3details
#14ACCEPTED0.24 s3details
#15ACCEPTED0.24 s3details
#16ACCEPTED0.24 s3details
#17ACCEPTED0.23 s3details
#18ACCEPTED0.23 s2, 3details

Code

#include <bits/stdc++.h>
using namespace std;
int c, d, e, n, m, k=1024*1024;
int t[1024*2049]={}, r[100001]={};
void muutos2(int f){
    f+=k;
    while (f>0){
        f/=2;
        t[f]=t[2*f]+t[2*f+1];
    }
}
void muutos(int a, int b){
    if (a>1 && abs(r[a]-r[a-1])>1){
        if (r[a]>r[a-1]){
            t[r[a-1]+1+k]--;
            t[r[a]+k]++;
            muutos2(r[a-1]+1);
            muutos2(r[a]);
        }
        else {
            t[r[a]+k+1]--;
            t[r[a-1]+k]++;
            muutos2(r[a]+1);
            muutos2(r[a-1]);
        }
    }
    if (a<n && abs(r[a+1]-r[a])>1){
        if (r[a+1]>r[a]){
            t[r[a]+k+1]--;
            t[r[a+1]+k]++;
            muutos2(r[a]+1);
            muutos2(r[a+1]);
        }
        else {
            t[r[a+1]+k+1]--;
            t[r[a]+k]++;
            muutos2(r[a+1]+1);
            muutos2(r[a]);
        }
    }
    r[a]=b;
    if (a>1 && abs(r[a]-r[a-1])>1){
        if (r[a]>r[a-1]){
            t[r[a-1]+k+1]++;
            t[r[a]+k]--;
            muutos2(r[a-1]+1);
            muutos2(r[a]);
        }
        else {
            t[r[a]+k+1]++;
            t[r[a-1]+k]--;
            muutos2(r[a]+1);
            muutos2(r[a-1]);
        }
    }
    if (a<n && abs(r[a+1]-r[a])>1){
        if (r[a+1]>r[a]){
            t[r[a]+k+1]++;
            t[r[a+1]+k]--;
            muutos2(r[a]+1);
            muutos2(r[a+1]);
        }
        else {
            t[r[a+1]+k+1]++;
            t[r[a]+k]--;
            muutos2(r[a+1]+1);
            muutos2(r[a]);
        }
    }
}
int summa(int g){
    int s=0;
    while (g>0){
        if (g%2==0){
            s+=t[g];
            g--;
        }
        g/=2;
    }
    return s;
}
int main(){
    cin >> n >> m;
    for (int i=1; i<=n; ++i) cin >> r[i];
    for (int i=2; i<=n; ++i){
        if (abs(r[i]-r[i-1])>1){
            if (r[i]>r[i-1]){
                t[r[i-1]+1+k]++;
                t[r[i]+k]--;
            }
            else {
                t[r[i]+1+k]++;
                t[r[i-1]+k]--;
            }
        }
    }
    for (int i=k-1; i>0; --i) {
        t[i]=t[2*i]+t[2*i+1];
    }
    for (int i=0; i<m; ++i){
        cin >> c;
        if (c==1) {
            cin >> d >> e;
            muutos(d, e);
        }
        else {
            cin >> d;
            cout << summa(d+k) << "\n";
        }
    }
    return 0;
}

Test details

Test 1

Group: 1, 3

Verdict: ACCEPTED

input
3 3
1 5 1
2 3
1 1 5
2 3

correct output
2
1

user output
2
1

Test 2

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
403944 539844 451514 488113 69...

correct output
444
462
34
516
288
...

user output
444
462
34
516
288
...

Test 3

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
487368 55984 456259 117591 818...

correct output
440
400
480
130
38
...

user output
440
400
480
130
38
...

Test 4

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
570792 604828 236813 971260 13...

correct output
386
460
50
470
126
...

user output
386
460
50
470
126
...

Test 5

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
686920 120969 241559 600738 48...

correct output
330
306
418
290
136
...

user output
330
306
418
290
136
...

Test 6

Group: 1, 3

Verdict: ACCEPTED

input
1000 1000
737640 478325 54816 262919 609...

correct output
230
418
148
338
4
...

user output
230
418
148
338
4
...

Test 7

Group: 1, 2, 3

Verdict: ACCEPTED

input
1000 1000
1 1000000 1 1000000 1 1000000 ...

correct output
999
999
999
999
999
...

user output
999
999
999
999
999
...

Test 8

Group: 2, 3

Verdict: ACCEPTED

input
100000 100000
18 15 8 5 7 19 19 11 11 8 6 15...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 9

Group: 2, 3

Verdict: ACCEPTED

input
100000 100000
611680 625326 848926 304761 34...

correct output
30636
30745
50130
4464
9086
...

user output
30636
30745
50130
4464
9086
...

Test 10

Group: 2, 3

Verdict: ACCEPTED

input
100000 100000
695104 174171 853672 901534 35...

correct output
31870
39772
30788
11144
42732
...

user output
31870
39772
30788
11144
42732
...

Test 11

Group: 2, 3

Verdict: ACCEPTED

input
100000 100000
1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 ...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 12

Group: 2, 3

Verdict: ACCEPTED

input
100000 100000
2845 22894 4105 11830 29440 21...

correct output
45066
50090
24109
27778
294
...

user output
45066
50090
24109
27778
294
...

Test 13

Group: 3

Verdict: ACCEPTED

input
100000 100000
123269 247698 241557 639404 38...

correct output
37412
1520
46224
964
50058
...

user output
37412
1520
46224
964
50058
...

Test 14

Group: 3

Verdict: ACCEPTED

input
100000 100000
206693 572351 22110 493074 737...

correct output
33086
49042
43971
17756
41889
...

user output
33086
49042
43971
17756
41889
...

Test 15

Group: 3

Verdict: ACCEPTED

input
100000 100000
322821 121195 59560 155256 829...

correct output
28252
45031
28212
6208
31642
...

user output
28252
45031
28212
6208
31642
...

Test 16

Group: 3

Verdict: ACCEPTED

input
100000 100000
438949 637336 872818 784733 17...

correct output
45374
22320
9690
5630
40012
...

user output
45374
22320
9690
5630
40012
...

Test 17

Group: 3

Verdict: ACCEPTED

input
100000 100000
489669 186180 653371 446915 52...

correct output
43104
43128
41430
35554
996
...

user output
43104
43128
41430
35554
996
...

Test 18

Group: 2, 3

Verdict: ACCEPTED

input
100000 100000
1 1000000 1 1000000 1 1000000 ...

correct output
99999
99999
99999
99999
99999
...

user output
99999
99999
99999
99999
99999
...