QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#859183#9676. AncestorsShumomo0 328ms53384kbC++142.0kb2025-01-17 16:10:092025-01-17 16:10:32

Judging History

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

  • [2025-01-17 16:10:32]
  • 评测
  • 测评结果:0
  • 用时:328ms
  • 内存:53384kb
  • [2025-01-17 16:10:09]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define tm asdfdfg
int n,m,l,r,u,tm,mp,tt,tmp,tot,d[100009],g[100009],v[100009],lg[100009],dfn[100009],ans[1000009],st[100009][22];
set<int> s[100009];
set<int>::iterator it;
vector<int> to[100009];
struct node{
    int l,r,x,id;
    bool operator < (const node aa)const{
        return r<aa.r||(r==aa.r&&id<aa.id);
    }
}q[1000009];
void add(int x){
    it=s[d[x]].lower_bound(dfn[x]);
    tmp=d[x];
//    cout<<x<<" "<<d[x]<<" "<<tmp<<endl;
    if(it!=s[d[x]].end()){
        tm=*it;
        tt=lg[tm-dfn[x]+1];
        mp=min(st[dfn[x]][tt],st[tm-(1<<tt)+1][tt]);
        tmp=min(tmp,d[x]-mp);
//        cout<<x<<" "<<d[x]<<" "<<tmp<<endl;
    }
    if(it!=s[d[x]].begin()){
        it--;
        tm=*it;
        tt=lg[dfn[x]-tm+1];
        mp=min(st[tm][tt],st[dfn[x]-(1<<tt)+1][tt]);
        tmp=min(tmp,d[x]-mp);
//        cout<<x<<" "<<d[x]<<" "<<tmp<<" "<<tm<<" "<<mp<<endl;
    }
    s[d[x]].insert(dfn[x]);
    g[x]=tmp-1;
    for(int i=n+1-g[x];i<=n+1;i+=(i&(-i)))v[i]++;
}
void dfs(int x){
    dfn[x]=++tot;
    for(auto i:to[x]){
        d[i]=d[x]+1;
        dfs(i);
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&u);
        to[u].emplace_back(i);
    }
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].x);
        q[i].id=i;
    }
    sort(q+1,q+m+1);
    dfs(0);
    lg[1]=0;
    for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
    for(int i=1;i<=n;i++){
        st[dfn[i]][0]=d[i];
    }
    for(int i=1;i<=lg[n];i++){
        for(int j=1;j+(1<<i)<=n;j++){
            st[j][i]=min(st[j][i-1],st[j+(1<<(i-1))][i-1]);
        }
    }
    l=1;
    r=0;
    for(int i=1;i<=m;i++){
        while(r<q[i].r){
            r++;
            add(r);
        }
        tmp=0;
        for(int j=n+1-q[i].x;j;j-=(j&(-j)))tmp+=v[j];
        ans[q[i].id]=tmp;
    }
    for(int i=1;i<=m;i++){
        printf("%d\n",ans[i]);
    }
    return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 16220kb

input:

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

output:

2
3
3
4
3

result:

wrong answer 2nd numbers differ - expected: '1', found: '3'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #30:

score: 0
Wrong Answer
time: 70ms
memory: 34144kb

input:

50000 200000
42574 43129 47328 17982 40521 6668 12729 32377 201 11940 8599 11734 18349 41045 26854 22540 9897 33419 7463 1243 47272 27135 49050 49111 22435 42539 39924 20272 5843 9308 45963 3283 31185 13692 38952 20583 15885 24802 4773 953 49907 28689 36942 23550 19449 8970 33340 31665 5407 46023 18...

output:

12072
1327
12370
2475
32809
37028
39185
31040
16761
16995
48336
42266
24077
1825
19174
7069
27509
30915
9298
17017
40463
31502
23214
8070
4021
36889
18667
6870
13467
25014
12480
17705
26332
12391
4251
2389
41200
14194
31780
26412
43116
38273
41276
23016
13035
45955
49523
19874
26233
30012
48616
4673...

result:

wrong answer 1st numbers differ - expected: '12045', found: '12072'

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Wrong Answer

Test #67:

score: 17
Accepted
time: 313ms
memory: 53384kb

input:

100000 1000000
6457 23693 90928 23592 90440 75018 16865 3342 83718 16731 95103 31510 38719 27886 29093 41955 6596 46409 51839 10527 91993 61074 14405 34833 53674 42363 11490 43757 46191 6058 59164 96938 57858 40178 97523 84164 21582 72243 11267 47368 97058 6637 95208 60092 53943 16441 28363 64965 52...

output:

52956
18767
1319
13405
11021
455
50595
81481
6813
3640
58937
10991
70
4713
36
9517
39731
1166
67346
74637
2667
45182
4914
6774
1625
4198
52270
30435
60137
48654
29768
2815
6846
73091
21944
49693
9923
46795
29787
6866
2435
20773
2959
34666
4377
2428
4582
7527
38292
7253
3586
63817
28075
43828
20215
1...

result:

ok 1000000 numbers

Test #68:

score: 0
Wrong Answer
time: 328ms
memory: 50928kb

input:

100000 1000000
82160 95864 48267 17482 19568 35077 14202 20440 4649 64145 148 2227 6969 39096 36508 20991 67700 90300 69215 57284 18492 9246 9629 7538 7845 30368 55600 48445 18542 41242 45052 25380 20894 91677 77040 73134 15572 21966 25343 14501 16227 23870 39207 50024 30787 11148 16884 63700 33205 ...

output:

44469
16565
2546
424
43423
23219
20745
3045
35596
11249
3763
322
27634
52470
20391
28546
14538
26343
9739
15234
20199
4332
1072
43633
3512
1432
47918
11347
4284
9054
6824
9773
39448
19949
18592
16534
43419
3303
11308
51071
1613
30619
8351
15408
6155
28590
13050
10085
2851
15353
33854
11870
5231
3742...

result:

wrong answer 12826th numbers differ - expected: '26660', found: '26652'

Subtask #6:

score: 0
Skipped

Dependency #1:

0%