QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#882295#9708. Yuuki and a problemgsn531AC ✓1677ms626720kbC++262.1kb2025-02-04 23:22:042025-02-04 23:22:04

Judging History

This is the latest submission verdict.

  • [2025-02-04 23:22:04]
  • Judged
  • Verdict: AC
  • Time: 1677ms
  • Memory: 626720kb
  • [2025-02-04 23:22:04]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;

#define int long long

#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define per(i, a, b) for(int i = (a); i >= (b); --i)
#define lb(x) (x & (-x))

const int maxn = 2e5 + 5;

int n, m, a[maxn], N = 2e5;

int rt[maxn], tot;
struct tree{
    int ch[2]; int sum;
}t[maxn * 200];

inline void updt(int &x, int l, int r, int p, int v){
    if(!x) x = ++tot; t[x].sum += v;
    if(l == r) return;
    int mid = l + r >> 1;
    if(p <= mid) updt(t[x].ch[0], l, mid, p, v);
    else updt(t[x].ch[1], mid + 1, r, p, v);
}
int st[maxn], tp, stt[maxn];
inline int qryr(int l, int r, int L, int R){
    if(l >= L and r <= R){
        int sum = 0;
        rep(i, 1, tp) sum += t[st[i]].sum;
        return sum;
    }
    int mid = l + r >> 1, sum = 0;
    if(L <= mid){
        rep(i, 1, tp) stt[i] = st[i], st[i] = t[st[i]].ch[0];
        sum += qryr(l, mid, L, R);
        rep(i, 1, tp) st[i] = stt[i];
    }
    if(R > mid){
        rep(i, 1, tp) stt[i] = st[i], st[i] = t[st[i]].ch[1];
        sum += qryr(mid + 1, r, L, R);
        rep(i, 1, tp) st[i] = stt[i];
    }
    return sum;
}

inline int qry(int x, int l, int r){
    tp = 0;
    for(int i = x; i; i -= lb(i)) st[++tp] = rt[i];
    return qryr(1, N, l, r);
}

signed main(){
    ios_base::sync_with_stdio(0); cin.tie(NULL);

    cin >> n >> m;
    rep(i, 1, n) cin >> a[i];

    rep(x, 1, n){
        for(int i = x; i <= n; i += lb(i))
            updt(rt[i], 1, N, a[x], a[x]);
    }

    while(m--){
        int op, x, y; cin >> op >> x >> y;
        if(op == 1){
            for(int i = x; i <= n; i += lb(i)){
                updt(rt[i], 1, N, a[x], -a[x]);
                updt(rt[i], 1, N, y, y);
            }
            a[x] = y;
        } else{
            int ans = 1;
            while(true){
                int tmp = qry(y, 1, ans) - qry(x - 1, 1, ans);
                if(tmp >= ans) ans = tmp + 1;
                else break;
            }
            cout << ans << '\n';
        }
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 818ms
memory: 626720kb

input:

199764 199778
133101 69413 73309 22139 46693 131970 90981 150001 6352 118276 101164 12691 168203 190853 98599 198097 86901 92688 192934 187579 47910 89959 111317 41624 197440 106737 121438 188902 106461 149886 163820 136239 14632 193976 42315 57797 87112 1001 81835 14938 143862 58531 18884 39422 746...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
...

result:

ok 99852 numbers

Test #2:

score: 0
Accepted
time: 927ms
memory: 594980kb

input:

199743 199521
58347 17936 21455 28866 21737 9533 66734 30077 974 23474 64572 18655 54496 3970 12256 5031 4870 81779 28649 38611 17190 59305 20236 84444 4607 1039 13615 66801 17518 7451 49128 20526 2053 45034 18673 33163 7070 918 62622 2432 11321 22571 34027 15386 98367 87636 5174 11802 5674 11897 49...

output:

1
1
2
1
2665756118
1
1
942578035
1
1
3051989985
2
3262365785
1705900076
1
2
1
1
1
2034374923
4640072932
3067002025
2200817130
3555564691
1
3213229019
2208128504
1
1
1
2749748541
1
3222821034
1
2190210138
2674196805
1
2338763039
2
3300034803
1
3126581521
2
5188482582
1
2
2306056230
1
3075211681
1
2
1...

result:

ok 99737 numbers

Test #3:

score: 0
Accepted
time: 243ms
memory: 103196kb

input:

200000 200000
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 20...

output:

39996662144
2
4
1
8
1
16
1
32
1
64
1
128
1
256
1
512
1
1024
1
2048
1
4096
1
8192
1
16384
1
32768
1
65536
1
131072
1
262144
1
462144
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
...

result:

ok 196076 numbers

Test #4:

score: 0
Accepted
time: 671ms
memory: 144044kb

input:

200000 200000
1 1 1 3 2 4 6 8 8 20 23 46 45 92 124 185 204 451 263 946 1016 1133 1652 3032 2264 7985 5876 13596 10566 28923 17002 51587 58833 91276 102833 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 20000...

output:

39993400008
2
3
4
7
9
13
19
27
35
55
78
124
169
261
385
570
774
1225
1488
2434
3450
4583
6235
9267
11531
19516
25392
38988
49554
78477
95479
147066
205899
297175
400008
39993060958
2
2
3
3
2
2
2
2
3
3
2
2
3
3
3
3
2
2
2
2
3
3
3
3
3
3
8
8
14
14
13
13
8
8
14
14
8
8
14
14
14
14
8
8
8
8
14
14
14
14
14
14...

result:

ok 175850 numbers

Test #5:

score: 0
Accepted
time: 786ms
memory: 320044kb

input:

200000 200000
200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000...

output:

35882662144
39961746091
39938912530
39942468766
33509221556
39947608555
39942137588
29969955382
38598405861
39955087000
37748488221
39966036256
39969467128
29860353347
30230763598
35619069461
35094269461
39921707549
28092120101
39941254645
36239709260
39966919943
27935599393
33989312796
33614750133
...

result:

ok 100000 numbers

Test #6:

score: 0
Accepted
time: 887ms
memory: 297636kb

input:

200000 200000
7527 422 7 26 246 130435 200000 200000 200000 1 3007 1514 8 829 14715 1088 51 61071 34682 3 206 2 104 14 4912 11 178 74 1 1 74680 200000 752 67 6 23 200000 68 38 1504 32 149361 251 22575 3010 3 10539 6018 29528 1 510 200000 4 200000 1 200000 30 188242 8 200000 200000 200000 109 458 200...

output:

860871
698722
3194
192249
22156
1090408
122497
349956
852853
928787
1013519
830974
1488
3562
643117
16610
640046
892960
1173975
428090
586907
1298
105913
128671
1095307
658278
247292
482084
944815
548671
1081753
149371
21078
455155
36874
99272
768668
102754
880725
693504
658038
158520
1208569
919680...

result:

ok 104000 numbers

Test #7:

score: 0
Accepted
time: 450ms
memory: 453412kb

input:

200000 200000
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 185897 63238 177956 9434 2897 104712 125166 104282 7464 21311 31056 163094 91535 168781 156567 18602 184347 87400 186624 132485 88660 136794 28799 33259 6711 144512 76601 144756 89525 190604 95881 13259 188530 81...

output:

19985785840
2
4
1
8
1
16
1
32
1
64
1
128
1
256
1
512
1
1024
1
2048
1
4096
1
8192
1
16384
1
32768
1
65536
1
131072
1
262144
1
448041
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
19985785839
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
...

result:

ok 196076 numbers

Test #8:

score: 0
Accepted
time: 1677ms
memory: 94876kb

input:

200000 200000
200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000...

output:

39940062144
39897862144
35522062144
39896662144
32647862144
39927462144
39930262144
25464462144
31472062144
33392462144
39902862144
34002462144
39925862144
39932262144
35917262144
31095062144
31416262144
30549662144
39947862144
26160262144
39929462144
39951262144
39905662144
39942062144
30228262144
...

result:

ok 200000 numbers

Test #9:

score: 0
Accepted
time: 875ms
memory: 488396kb

input:

200000 200000
1 1 1 2 2 7 6 12 11 22 20 54 53 111 119 177 254 390 488 703 734 1263 1241 2839 3816 4227 5039 9075 9138 23548 23251 33584 61977 65660 124338 46418 126844 49672 89918 66238 152507 76549 183787 88574 22657 125441 64370 83264 147127 116012 67344 21334 78028 151321 73479 24440 116276 15232...

output:

19973645554
2
3
4
6
8
15
21
33
44
66
86
140
193
304
423
600
854
1244
1732
2435
3169
4432
5673
8512
12328
16555
21594
30669
39807
63355
86606
120190
182167
247827
372165
19973770662
2
2
3
3
3
3
2
2
2
2
3
3
3
3
3
3
5214618815
5746320693
5388805950
7697573867
7353206574
9451284962
5289881199
5451390292...

result:

ok 176130 numbers

Test #10:

score: 0
Accepted
time: 823ms
memory: 273012kb

input:

200000 200000
2 27 1 912 106 2181 5201 1083 73 283 4 44121 7145 451 55 1 18489 8088 13 8 118 14629 11750 446 60 1 238 3 30 14 2510 694 10040 1256 37326 5020 7 1 334 3 1420 807 153 391 1 208 1 2841 838 3 26896 6521 6 39 19 7 1 13043 78 515 12 94 462 28 219 1350 5 6874 438 9 318 1 1565 17 1 12143 2608...

output:

88245
84481
26893
26211
8045
43
5516
14986
20162
6649
4146
24223
5890
54535
45666
6803
10127
1010
2577
71451
22347
1040
450
77970
11055
4262
108794
79731
3799
15200
14850
75603
15773
4
17145
21
12866
28320
146164
36092
73065
13252
13311
222162
45655
52252
39832
101
1821
36266
13533
26885
77057
83519...

result:

ok 105000 numbers