QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#559287#9252. Penguins in RefrigeratorLarunatrecyTL 556ms222352kbC++143.2kb2024-09-11 21:11:362024-09-11 21:11:41

Judging History

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

  • [2024-09-11 21:11:41]
  • 评测
  • 测评结果:TL
  • 用时:556ms
  • 内存:222352kb
  • [2024-09-11 21:11:36]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+7;
typedef long long LL;
template <typename T>inline void read(T &x)
{
    x=0;char c=getchar();bool f=0;
    for(;c<'0'||c>'9';c=getchar())f|=(c=='-');
    for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c-'0');
    x=(f?-x:x);
}
int n,L;
int p[N],a[N],w[N];
int ls[N],rs[N],fa[N][22],stk[N],top=0;
int siz[N],jump[N];
const int mod = 1e9+7;
int fac[N],ifac[N];
vector<int> vec[N];
int Pow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1)res=1ll*res*a%mod;
        a=1ll*a*a%mod;
        b>>=1;
    }
    return res;
}
int A(int n,int m)
{
    if(n<0||m<0||n<m)return 0;
    return 1ll*fac[n]*ifac[n-m]%mod;
}
int frt[N],lst[N];
int pre[N],nxt[N];
int seq[N],m=0;
void lnk(int x,int y)
{
    if(!x&&!y)return;
    if(!x)pre[y]=0;
    else if(!y)nxt[x]=0;
    else
    {
        pre[y]=x;
        nxt[x]=y;
    }
}
void cut(int x,int y)
{
    nxt[x]=pre[y]=0;
}
int dfs(int x)
{
    if(!x)return 1;
    if(jump[x]!=x)return 1;
    int res=1ll*dfs(ls[x])*dfs(rs[x])%mod;
    siz[x]=1+siz[ls[x]]+siz[rs[x]];
    frt[x]=lst[x]=x;
    if(lst[ls[x]])lnk(lst[ls[x]],x),frt[x]=frt[ls[x]];
    if(frt[rs[x]])lnk(x,frt[rs[x]]),lst[x]=lst[rs[x]];
    res=1ll*res*A(siz[x]+vec[x].size(),vec[x].size())%mod;
    sort(vec[x].begin(),vec[x].end(),[&](int i,int j){return p[i]<p[j];});
    if(!vec[x].empty())
    {
        for(int j=0;j<vec[x].size()-1;j++)
        lnk(vec[x][j],vec[x][j+1]);
        m=0;
        int i=frt[x],j=vec[x][0],o=0;
        while(i&&j)
        {
            if(p[i]<p[j])
            {
                int t=nxt[i];
                cut(i,nxt[i]);
                if(!o)frt[x]=i;
                lnk(o,i);
                o=i;
                i=t;
            }
            else
            {
                int t=nxt[j];
                cut(j,nxt[j]);
                if(!o)frt[x]=j;
                lnk(o,j);
                o=j;
                j=t;
            }
        }
        if(i)lnk(o,i);
        else lnk(o,j),lst[x]=vec[x].back();
    }
    siz[x]+=vec[x].size();
    return res;
}
int main()
{
    //freopen("a.in","r",stdin);
    read(n);read(L);
    for(int i=1;i<=n;i++)read(p[i]);
    reverse(p+1,p+n+1);
    for(int i=1;i<=n;i++)read(w[i]);
    for(int i=1;i<=n;i++)a[i]=w[p[i]];
    for(int i=1;i<=n;i++)
    {
        while(top&&a[stk[top]]<=a[i])ls[i]=stk[top--];
        if(top)rs[stk[top]]=i,fa[i][0]=stk[top];
        stk[++top]=i;
        if(ls[i])fa[ls[i]][0]=i;
    }
    for(int k=1;k<=20;k++)
    for(int i=1;i<=n;i++)
    fa[i][k]=fa[fa[i][k-1]][k-1];
    for(int i=1;i<=n;i++)
    {
        int x=i;
        for(int k=20;k>=0;k--)
        if(fa[x][k]&&a[fa[x][k]]+a[i]<=L)
        x=fa[x][k];
        if(a[x]+a[i]>L)x=i;
        if(x!=i)vec[x].push_back(i);
        jump[i]=x;
    }
    int r=0;
    for(int i=1;i<=n;i++)if(!fa[i][0])r=i;
    fac[0]=1;
    for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod;
    ifac[n]=Pow(fac[n],mod-2);
    for(int i=n-1;i>=0;i--)ifac[i]=1ll*ifac[i+1]*(i+1)%mod;
    int res=dfs(r);
    printf("%d\n",res);
    for(int i=1,x=frt[r];i<=n;i++,x=nxt[x])printf("%d ",p[x]);
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 7ms
memory: 50864kb

input:

5 10
1 2 3 4 5
6 5 3 9 2

output:

3
5 4 2 1 3 

result:

ok 2 lines

Test #2:

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

input:

5 10
1 2 3 4 5
2 4 3 3 8

output:

30
1 5 2 3 4 

result:

ok 2 lines

Test #3:

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

input:

5 10
1 2 3 4 5
2 3 4 5 1

output:

120
1 2 3 4 5 

result:

ok 2 lines

Test #4:

score: 0
Accepted
time: 7ms
memory: 50876kb

input:

5 10
1 2 3 4 5
2 3 4 5 6

output:

60
1 2 3 5 4 

result:

ok 2 lines

Test #5:

score: 0
Accepted
time: 36ms
memory: 61668kb

input:

100000 96
1996 78922 45321 68844 32404 82013 66552 81163 17216 48170 35495 56660 13480 43118 23173 47257 50168 87069 26167 67231 31758 25694 61063 56642 8923 7727 54528 96554 38964 7604 6822 16256 45300 58869 31359 48638 87645 14779 81505 59585 89293 9291 7002 31810 84701 77648 78295 42595 11394 479...

output:

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

result:

ok 2 lines

Test #6:

score: 0
Accepted
time: 27ms
memory: 63172kb

input:

100000 84
93330 3894 94859 22134 49668 30606 26739 82976 76701 56323 75537 7626 87226 20857 98177 21811 70827 75898 8111 48223 26186 64222 63002 79024 19126 41638 1048 43857 25379 19764 60207 27675 77665 66327 6274 34861 30287 13449 64505 51490 5804 65843 49014 85795 12365 31565 34411 71697 66568 28...

output:

524727018
1723 2800 15421 26278 31659 42502 42606 56945 60694 62369 70160 73990 80586 88502 89122 59690 27661 33622 94788 14089 1146 2690 3632 4491 5439 8588 17476 17922 18136 20123 24857 39523 18825 28520 30999 32947 36013 41413 43842 43919 54502 58104 60783 65767 69064 71878 74728 75343 76546 7807...

result:

ok 2 lines

Test #7:

score: 0
Accepted
time: 31ms
memory: 64756kb

input:

100000 87
300 88662 44078 62834 3753 7407 33249 23452 84415 76976 83633 97611 16701 2788 75559 56876 65161 78422 41095 40238 89019 95291 81242 34629 35820 2766 266 62909 53458 60609 92867 7751 43644 89656 46268 73554 29490 91474 42521 66646 22973 36675 3527 66659 6283 65870 56067 93748 94932 45445 3...

output:

474454223
16291 67920 66350 36657 80297 50836 75962 67504 74275 82684 44748 18794 20817 23451 67820 94633 35098 26272 62387 64130 97543 95388 6171 41925 9995 21720 51796 81891 29780 53247 63390 78398 10287 31830 44454 46864 63394 76771 87042 17437 8412 58246 18774 97383 36854 4632 32575 64180 48940 ...

result:

ok 2 lines

Test #8:

score: 0
Accepted
time: 32ms
memory: 64480kb

input:

100000 100
55629 14377 79945 51098 90204 3853 3177 32017 78776 91382 20382 74435 13483 67713 43513 69929 15961 6388 48752 94868 14114 90543 87776 22290 94148 14665 67822 15542 37889 31214 53405 58817 74349 80153 50913 24099 84889 86056 59976 40327 59231 97231 45030 99883 57171 7168 60283 46638 6697 ...

output:

12361691
68929 26283 16078 8426 80994 89031 90845 85691 11489 83714 218 43955 79942 49055 15944 46958 3923 50718 51881 87716 91070 33513 46064 56932 23620 95805 36252 61014 77254 96568 40681 51389 15855 70350 42900 63333 35239 73615 3271 20950 31494 86984 66093 18145 50335 78044 93515 60899 73400 82...

result:

ok 2 lines

Test #9:

score: 0
Accepted
time: 274ms
memory: 168784kb

input:

1000000 81
505338 916424 583795 203566 617115 482998 227468 356473 312485 334132 3363 907091 837133 257003 855999 78795 363135 170084 379933 348671 686 989733 970073 613993 760088 594394 96392 386305 559944 490393 934509 798454 875291 431076 978853 472290 445607 906742 260667 85265 928267 662293 850...

output:

1
434417 227927 721379 881382 991471 289735 100004 760754 181792 283705 493486 797104 785634 77915 488388 580313 676447 601952 699628 15819 730688 550717 818459 115930 718996 87059 278519 341770 205766 196170 470043 729232 605060 297713 562576 502884 205091 63073 969512 719434 832742 262524 893809 1...

result:

ok 2 lines

Test #10:

score: 0
Accepted
time: 395ms
memory: 163892kb

input:

1000000 855853371
671882 962935 236810 309323 731542 936655 349551 915671 728370 235701 940712 512459 431213 624267 374020 458688 149286 146845 938189 496488 78945 50430 630392 695360 119964 195349 284330 320026 415129 675618 454235 401145 366361 129120 527400 159031 540788 688684 238547 914676 4502...

output:

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

result:

ok 2 lines

Test #11:

score: 0
Accepted
time: 345ms
memory: 172960kb

input:

1000000 957571370
997755 236289 938217 183949 245742 901546 815337 293623 483897 447597 648079 8259 601800 328449 705646 550681 971772 635040 983132 321434 297617 994716 277334 407243 7535 441861 630008 322245 4749 622934 40122 595912 610078 418322 792502 659098 981324 115306 196723 995928 653988 12...

output:

196613543
8666 50188 54027 60170 63101 84940 100746 141072 144773 162176 166539 180410 188742 200350 233463 289011 294968 327822 361963 362045 365360 373782 378529 384683 395814 400565 412249 426607 451013 453497 486792 500299 501563 503029 527962 532266 540692 549841 554433 555692 578207 587245 309...

result:

ok 2 lines

Test #12:

score: 0
Accepted
time: 309ms
memory: 173600kb

input:

1000000 808170131
271560 789245 8943 714638 700264 418823 975445 476711 934265 77678 944870 858155 812771 462154 715736 742621 689488 193610 115853 883249 687845 531685 22131 29384 772945 176972 630084 675971 609450 488597 55786 781720 208081 97123 810367 722365 957655 302332 328957 621208 772189 13...

output:

895770364
317901 376287 641310 859340 960574 246282 32177 63684 239374 534359 591735 937287 666444 303601 764716 947219 395979 508421 750441 254676 911202 958056 390533 229585 58162 164836 431844 141305 315803 837011 504379 224738 955205 725934 375706 607486 356819 809721 739670 841619 94497 132028 ...

result:

ok 2 lines

Test #13:

score: 0
Accepted
time: 278ms
memory: 169876kb

input:

1000000 921697697
510869 325175 912287 76200 267946 196566 280254 478297 605706 422740 294586 757231 806399 421000 946945 826982 892384 94539 164635 669191 29701 283479 197248 916663 922217 873836 641086 135377 885683 938021 917652 415210 386341 909867 104726 417411 584785 221653 310404 785946 50749...

output:

26397744
74052 75686 286379 558067 712866 718029 252642 343310 883971 933200 675850 374677 702925 390886 401806 477880 946457 507454 556609 989214 824674 229271 993468 83455 325821 841962 264526 937152 604811 350821 64736 839110 135921 138196 177501 182090 302505 432962 394141 130562 190620 673567 6...

result:

ok 2 lines

Test #14:

score: 0
Accepted
time: 256ms
memory: 166416kb

input:

1000000 715224327
142757 848503 196089 967433 276363 163311 39090 467040 906998 624415 676126 894650 38094 559122 446718 948581 878403 60954 92732 411351 351153 714086 588966 236003 874560 356838 655429 454326 560887 554779 336553 360512 278255 146227 122609 258837 216395 166347 171148 428705 503848...

output:

1
725711 716862 11272 806976 86234 607909 475197 584372 220750 864835 838750 461136 764052 271663 669608 748849 409237 373833 186301 795042 393152 944766 681020 322478 634634 83655 132769 255523 171009 76865 331567 528132 604856 695065 448208 571548 792572 672111 366853 662995 271629 290686 208575 6...

result:

ok 2 lines

Test #15:

score: 0
Accepted
time: 268ms
memory: 165516kb

input:

1000000 94
732832 824385 80610 86380 900983 71723 382380 222054 46533 243003 730000 214251 629211 759027 143920 743196 524310 386215 709124 626379 243508 147769 169616 933797 641552 946395 522265 454896 746806 938530 413949 141576 266714 374723 1495 258 168689 853795 224890 348364 423101 547355 5811...

output:

252663062
690724 825394 618011 650249 818303 780516 332481 422142 541930 407558 699031 214758 536840 93081 21770 691395 456753 679385 367716 146074 339496 267083 728487 615334 820251 927249 839952 270754 978023 753557 637125 194906 288004 57599 382228 165457 5302 51851 266756 856409 96240 396272 772...

result:

ok 2 lines

Test #16:

score: 0
Accepted
time: 556ms
memory: 209240kb

input:

1000000 99
4178 931168 210242 561422 957522 950349 621494 299138 694428 890073 99566 860399 156939 334289 910642 663741 564875 3797 266989 298372 8263 239639 317861 861704 300698 651181 757530 817042 394445 640956 346401 919687 759026 618445 316528 525462 556450 334906 489721 491750 160475 328418 13...

output:

269552242
2 3 6 10 11 12 15 18 19 20 22 23 27 29 31 33 34 36 38 40 41 44 45 46 48 49 52 57 58 65 67 72 78 80 82 86 89 90 93 95 98 101 102 103 105 107 110 111 114 121 122 123 124 131 132 134 135 137 139 141 143 148 150 151 152 153 154 156 158 161 163 168 171 172 175 176 178 179 180 181 182 184 185 18...

result:

ok 2 lines

Test #17:

score: 0
Accepted
time: 397ms
memory: 222352kb

input:

1000000 679929501
431235 713814 338483 357970 405842 135564 380661 689063 57872 235545 998283 670897 983715 925773 641244 560970 617441 53369 498534 684410 801204 82176 525998 897028 655245 349349 493440 220184 679407 630370 788841 408291 588088 119206 530508 818552 233973 205211 783475 441990 81557...

output:

90834237
945608 308957 338483 357970 405842 431235 533573 520937 135564 713814 795172 78109 230636 57872 288313 380661 689063 704210 742417 235545 569766 153750 78467 93184 7048 560970 641244 670897 679126 53369 498534 617441 925773 965193 79342 82176 153413 525998 684410 801204 888127 831640 873801...

result:

ok 2 lines

Test #18:

score: -100
Time Limit Exceeded

input:

1000000 944684390
431758 595986 647848 934626 598354 501964 160568 865807 884677 189702 952713 354306 594455 802759 2925 255255 786404 831306 765610 462575 874583 940337 346756 349911 600185 567394 308185 139400 353002 134598 220481 946992 401849 16154 228662 4829 321208 819516 189029 907104 858106 ...

output:


result: