QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#563571#4239. MSTrotcar07TL 36ms7828kbC++201.3kb2024-09-14 13:55:052024-09-14 13:55:08

Judging History

This is the latest submission verdict.

  • [2024-09-14 13:55:08]
  • Judged
  • Verdict: TL
  • Time: 36ms
  • Memory: 7828kb
  • [2024-09-14 13:55:05]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
constexpr int N=3e5+5;
int n,a[N],fa[N],to[N],val[N],sb[N];
inline int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);}
inline void solve(){
    cin>>n;for(int i=1;i<=n;i++) cin>>a[i],fa[i]=i;
    int w=n-1;
    long long ans=0;
    while(w){
        pair<int,int> yanami(a[1],getfa(1)),nukumizu(-1e9,0);
        for(int i=1;i<=n;i++) val[i]=1e9,sb[i]=fa[i]==i;
        for(int i=2;i<=n;i++){
            int f=getfa(fa[i]);
            auto&cur=(f!=yanami.first?yanami:nukumizu);
            if(a[i]-cur.first<val[f])to[f]=cur.second,val[f]=a[i]-cur.first;
            nukumizu=max(nukumizu,cur);
            cur=max(cur,make_pair(a[i],f));
        }
        yanami=make_pair(a[n],getfa(n)),nukumizu=make_pair(1e9,0);
        for(int i=n-1;i>=1;i--){
            int f=getfa(fa[i]);
            auto&cur=(f!=yanami.first?yanami:nukumizu);
            if(cur.first-a[i]<val[f])to[f]=cur.second,val[f]=cur.first-a[i];
            nukumizu=min(nukumizu,cur);
            cur=min(cur,make_pair(a[i],f));
        }
        for(int i=1;i<=n;i++) if(sb[i]&&getfa(i)!=getfa(to[i])){
            fa[getfa(to[i])]=getfa(i);w--;
            ans+=val[i];
        }
    }
    cout<<ans<<'\n';
}
int main(){
    std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--) solve();
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 7828kb

input:

2
5
1 2 3 4 5
3
10 45 10

output:

4
-35

result:

ok 2 number(s): "4 -35"

Test #2:

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

input:

300000
1
-167586
1
45048
1
-218274
1
-39107
1
-15880
1
33014
1
217559
1
-208936
1
-260570
1
-83353
1
-39868
1
-253159
1
-26640
1
-114610
1
-244464
1
-7217
1
-196817
1
168691
1
146930
1
284612
1
-93130
1
-186071
1
-31746
1
37800
1
-255791
1
-237603
1
81359
1
201796
1
106965
1
-8371
1
-85871
1
-270622...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 300000 numbers

Test #3:

score: -100
Time Limit Exceeded

input:

150000
2
-13258 -22375
2
-54993 -139278
2
-190454 190904
2
-167856 -255749
2
-4278 -217960
2
-267607 -152069
2
232717 199468
2
-154968 -171972
2
-166963 -274452
2
78459 -235523
2
-243695 163707
2
37498 -80301
2
196137 -251909
2
-77332 -82651
2
236076 250081
2
-139194 8035
2
256129 185906
2
72175 -17...

output:

-9117
-84285
381358
-87893
-213682
115538
-33249
-17004
-107489
-313982
407402
-117799
-448046
-5319
14005
147229
-70223
-242776
531933
251314
-377509
-258596
-210071
480133
-27044
110616
213370
6298
-370703
-118888
-103653
-346212
54848
-39115
-22654
-90525
-90204
345598
-96264
854
-433346
-187189
...

result: