QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#562355#8188. Halve & MergeAfterlife#TL 2ms5792kbC++202.3kb2024-09-13 17:01:412024-09-13 17:01:42

Judging History

你现在查看的是最新测评结果

  • [2024-09-13 17:01:42]
  • 评测
  • 测评结果:TL
  • 用时:2ms
  • 内存:5792kb
  • [2024-09-13 17:01:41]
  • 提交

answer

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

const int N=2e5+1e3+7;

int n,m;

int tr[N][2],mag[N],sz[N],val[N];

int rt,tot,mx[N];

void clear()
{
    rt=tot=0;
}

int newnode(int v)
{
    int x=++tot;
    sz[x]=1;
    tr[x][0]=tr[x][1]=0;
    val[x]=v;
    mx[x]=val[x];
    mag[x]=rand();
    return x;
}

void update(int x)
{
    sz[x]=sz[tr[x][0]]+sz[tr[x][1]]+1;
    mx[x]=max({mx[tr[x][0]],mx[tr[x][1]],val[x]});
}

int merge(int x,int y)
{
    if(!x||!y)
        return x|y;
    if(mag[x]>mag[y])
    {
        tr[x][1]=merge(tr[x][1],y);
        update(x);
        return x;
    }
    else
    {
        tr[y][0]=merge(x,tr[y][0]);
        update(y);
        return y;
    }
}

void split(int x,int K,int &l,int &r)
{
    if(!x)
    {
        l=r=0;
        return;
    }
    if(K<=sz[tr[x][0]])
    {
        split(tr[x][0],K,l,r);
        tr[x][0]=r;
        update(r=x);
    }
    else
    {
        split(tr[x][1],K-sz[tr[x][0]]-1,l,r);
        tr[x][1]=l,update(l=x);
    }
}

int qry(int x,int v)
{
    if(!x)
        return 0;
    if(mx[tr[x][0]]>v)
        return qry(tr[x][0],v);
    else if(val[x]>v)
        return sz[tr[x][0]];
    else
        return sz[tr[x][0]]+1+qry(tr[x][1],v);
}

int getv(int x,int k)
{
    if(k<=sz[tr[x][0]])
        return getv(tr[x][0],k);
    else if(k==sz[tr[x][0]]+1)
        return val[x];
    else
        return getv(tr[x][1],k-sz[tr[x][0]]-1);
}

int getl(int x)
{
    if(!tr[x][0])
        return val[x];
    return getl(tr[x][0]);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int w;
        cin>>w;
        int x=newnode(w);
        rt=merge(rt,x);
    }
    while(m--)
    {
        int op,x;
        cin>>op>>x;
        if(op==1)
            cout<<getv(rt,x)<<"\n";
        else
        {
            int L,R;
            split(rt,x,L,R);
            while(R)
            {
                int w=getl(R);
                int c=qry(R,w);
                int t;
                split(R,c,t,R);
                c=qry(L,w);
                int z;
                split(L,c,L,z);
                L=merge(L,t);
                L=merge(L,z);
            }
            rt=L;
        }
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5696kb

input:

4 3
4 3 2 1
2 1
2 1
1 2

output:

1

result:

ok 1 number(s): "1"

Test #2:

score: 0
Accepted
time: 1ms
memory: 5636kb

input:

5 7
4 3 5 2 1
2 4
2 1
1 3
1 1
2 4
1 4
1 5

output:

3
1
3
5

result:

ok 4 number(s): "3 1 3 5"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3588kb

input:

2 2
2 1
2 1
1 2

output:

2

result:

ok 1 number(s): "2"

Test #4:

score: 0
Accepted
time: 1ms
memory: 5700kb

input:

25 25
21 20 19 12 11 17 22 16 24 1 13 7 14 9 2 5 8 3 4 23 15 25 18 10 6
2 4
2 11
1 10
1 22
1 8
2 1
1 11
2 10
2 1
1 6
1 11
2 2
1 22
1 21
1 4
1 1
1 12
2 23
2 19
2 4
2 11
1 6
1 19
1 7
1 16

output:

17
25
3
21
5
21
25
13
9
7
20
9
16
2
19

result:

ok 15 numbers

Test #5:

score: 0
Accepted
time: 1ms
memory: 5644kb

input:

50 50
40 46 9 20 17 44 43 11 14 15 25 38 48 36 19 35 23 6 16 30 5 42 47 8 3 2 27 41 31 24 50 4 49 34 37 33 26 32 39 1 29 12 18 10 45 7 13 21 28 22
1 10
2 5
1 18
1 50
1 32
2 29
2 33
1 11
1 31
2 23
1 35
1 3
1 47
2 9
2 13
1 15
2 16
1 46
1 40
2 16
1 22
1 35
2 8
1 16
2 25
1 19
1 12
1 8
2 49
1 17
2 25
1 1...

output:

15
6
22
4
18
48
23
28
31
12
41
42
25
23
40
43
37
33
40
39
37
1
47
11
36
34
17

result:

ok 27 numbers

Test #6:

score: 0
Accepted
time: 1ms
memory: 5732kb

input:

75 75
7 29 18 60 15 31 34 53 43 63 38 54 9 5 50 28 74 68 55 21 67 35 19 8 26 40 47 75 10 56 44 25 52 39 58 3 30 62 64 16 42 1 73 49 45 4 13 66 69 37 32 61 20 57 11 41 65 51 22 24 27 36 12 17 70 48 6 72 14 46 33 59 71 2 23
1 48
1 71
2 43
1 31
1 11
1 4
2 44
2 71
2 21
1 27
1 15
2 6
1 69
1 48
2 57
1 17
...

output:

66
33
51
34
49
37
60
52
72
13
71
33
12
50
43
14
69
71
47
57
17
6
33
15
3
46
63
9
66
7
54
70
41
53
28
27
49
5
40
19
27
14
42
7
24
15
54

result:

ok 47 numbers

Test #7:

score: 0
Accepted
time: 1ms
memory: 5636kb

input:

100 100
34 41 2 16 70 22 13 43 95 74 97 88 3 29 78 77 83 50 79 58 93 17 30 19 21 45 44 99 64 69 75 46 27 42 91 37 84 71 92 8 11 24 15 23 66 81 18 7 53 59 12 20 5 32 54 76 39 52 73 89 25 4 49 26 56 36 38 35 87 31 72 96 1 10 68 94 86 90 65 60 40 33 6 82 47 55 62 28 100 98 61 80 51 67 85 63 14 57 48 9
...

output:

31
42
87
5
34
74
58
32
50
59
28
43
1
46
23
18
4
48
90
35
4
2
98
20
99
32
91
43
22
23
81
66
46
30
22
31
22
21
72
45
95
11
26
6
4
42
53
11
35
45
85
64
2
70
43

result:

ok 55 numbers

Test #8:

score: 0
Accepted
time: 2ms
memory: 5720kb

input:

5000 5000
4273 4131 1283 3216 1735 1507 4834 576 1708 3554 2183 3309 2559 2685 937 4262 3644 459 2106 4310 2101 3240 1764 2671 2532 1241 2443 4283 1578 314 2828 3513 4542 3656 4399 673 1317 4916 2367 110 4406 3410 3661 453 1221 4473 2191 503 2649 3838 4904 1239 120 2027 4443 2546 1012 4360 49 1267 5...

output:

479
3346
4797
3082
3200
1792
2157
383
1090
3223
1162
264
81
154
4643
3418
3526
3445
3142
1105
28
1981
1008
1829
1036
2218
4022
748
1683
1866
1304
1998
4303
4286
3368
3215
1408
3510
1783
3617
2063
4227
3641
4511
465
2018
4018
375
1591
3507
3019
1270
1051
2354
2727
3659
3550
1660
2677
4095
1881
1908
1...

result:

ok 5000 numbers

Test #9:

score: 0
Accepted
time: 2ms
memory: 5748kb

input:

5000 5000
2529 3862 4114 4780 4184 2787 3081 1575 4740 2944 4813 2626 901 4649 518 4782 1180 2166 3693 4678 4795 4194 2308 1442 3087 4467 4016 283 3664 3017 4756 218 3796 888 3715 4251 4698 329 4371 2533 755 1549 4658 3154 3670 1228 2337 1598 1406 3468 2302 2352 4204 1471 3133 2072 4484 767 2152 419...

output:

251
28
4495
4896
1141
4312
1376
4247
3934
1980
1218
423
3810
1573
3229
4363
3820
99
3706
2898
1179
1907
1016
3341
970
3254
3945
782
1557
1350
4618
4651
4503
2924
2366
1646
343
839
1336
3035
1653
3478
681
1140
3403
3182
2598
2953
4960
1717
4244
1824
1578
3194
2413
159
4437
3983
1747
1477
3584
2692
19...

result:

ok 5000 numbers

Test #10:

score: 0
Accepted
time: 2ms
memory: 5792kb

input:

5000 5000
1849 4447 3474 1988 2793 3570 3480 3416 4492 2781 3060 2257 1324 3186 3438 2923 4160 3193 3960 642 2555 4712 3421 4019 4597 4759 1480 2855 601 4782 1993 1253 4471 3737 1936 109 1838 4436 3760 2547 3204 596 87 3370 4704 780 480 1580 3018 3783 2016 1513 1609 2101 4264 919 3386 1843 1486 4024...

output:

3547
2510
3389
1761
2170
536
4664
3173
3428
4495
2321
3913
4849
771
3521
3717
1921
90
4377
3792
3982
1984
1331
895
398
958
744
4336
1571
2905
283
1247
1217
397
2718
3323
2169
3927
2097
2632
3116
3612
2794
1950
4761
4919
3750
1213
125
2343
2993
829
1090
1713
2612
4439
3825
1147
102
1490
1826
1084
144...

result:

ok 5000 numbers

Test #11:

score: -100
Time Limit Exceeded

input:

200000 200000
179452 184566 70496 25045 45839 40048 152780 4407 43919 144186 96868 104482 96217 61207 142227 165786 26564 9980 22512 90283 87997 159485 151301 130070 192792 194726 169304 28217 69023 192199 108110 53151 69453 55703 102598 39287 85763 193001 104872 74888 53143 159465 199469 145888 374...

output:

93207
9021
71900
82003
153245
113222
25525
32537
148606
165234
125924
45534
88410
188086
54063
29701
49503
66055
140254
130909
183032
64616
98512
114336
197868
33906
187784
150293
61702
100105
19633
108843
194306
43885
187790
188925
199564
195593
2753
73806
100166
59078
36608
92116
25731
161812
6620...

result: