ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#105 | #8. 【模板】普通平衡树 | wuenzi | 11 | 1193ms | 6508kb | C++23 | 2.9kb | 2025-04-16 22:12:23 | 2025-04-16 22:12:23 |
answer
#include<bits/stdc++.h>
#define int long long
//#include"GST.h"
using namespace std;
const double alpha=0.75;
int rt=0;
struct WZOI{
int l,r;
int v;
int cnt;
int s,sz,sd;
}a[100005];
void zxblll(int x){
if(!x) return;
zxblll(a[x].l);
cout<<a[x].v<<' ';
zxblll(a[x].r);
return;
}
void pushup(int x){
a[x].s=a[a[x].l].s+a[a[x].r].s+1;
a[x].sz=a[a[x].l].sz+a[a[x].r].sz+a[x].cnt;
a[x].sd=a[a[x].l].sd+a[a[x].r].sd+(a[x].cnt!=0);
}
int lll[100005];
int cnt;
void pb(int &len,int x){
if(a[x].l)pb(len,a[x].l);
// _sleep(10);
if(a[x].cnt)lll[len++]=x;
if(a[x].r)pb(len,a[x].r);
}
bool nf(int x){
return a[x].cnt&&((double)(max(a[a[x].l].s,a[a[x].r].s))>=alpha*a[x].s||(double)(a[x].sd)<=a[x].s*alpha);
}
int build(int l,int r){
int mid=l+r>>1;
if(l>=r) return 0;
a[lll[mid]].l=build(l,mid);
a[lll[mid]].r=build(mid+1,r);
pushup(lll[mid]);
return lll[mid];
}
void cg(int &k){
// cout<<max(a[a[k].l].s,a[a[k].r].s)<<" "<<alpha*a[k].s<<endl;
// if(!nf(k))return;
// cout<<"dfdsjfshdfsdjfshdj\n";
int tle=0;
// memcpy(b,a,sizeof(a));
pb(tle,k);
k=build(0,tle);
// cout<<"???????\n";
}
void insert(int x,int &k){
// cout<<x<<' '<<k<<endl;
if(k==0){
// cout<<x<<endl;
k=++cnt;
if(rt==0)rt=1;
// cout<<k<<endl;
a[k].v=x;
a[k].l=a[k].r=0;
a[k].cnt=a[k].s=a[k].sz=a[k].sd=1;
return;
}
if(x==a[k].v)a[k].cnt++;
else if(x>a[k].v)insert(x,a[k].r);
else insert(x,a[k].l);
pushup(k);
if(nf(k))cg(k);
// cout<<k<<endl;
}
void erase(int x,int &k){
// cout<<x<<' '<<k<<endl;
// cout<<a[k].l<<" "<<a[k].r<<endl;
if(!k){
return;
}
if(x==a[k].v)if(a[k].cnt)a[k].cnt--;
else if(x>a[k].v)erase(x,a[k].r);
else erase(x,a[k].l);
pushup(k);
// cout<<k<<endl;
if(nf(k))cg(k);
}
int kth(int p,int x=rt){
if(!x) return 0;
else if(a[a[x].l].sz<p && p<=a[a[x].l].sz+a[x].cnt)return a[x].v;
else if(p>a[a[x].l].sz+a[x].cnt)return kth(p-a[a[x].l].sz-a[x].cnt,a[x].r);
else return kth(p,a[x].l);
}
int bd(int p,int k=rt){
if(!k)return 1;
else if(a[k].v==p&&a[k].cnt)return a[a[k].l].sz+1+a[k].cnt;
else if(p<a[k].v)return bd(p,a[k].l);
else return a[a[k].l].sz+a[k].cnt+bd(p,a[k].r);
}
int grt(int p,int k=rt){
if(!k)return 0;
else if(a[k].v==p&&a[k].cnt)return a[a[k].l].sz;
else if(p>a[k].v)return a[a[k].l].sz+a[k].cnt+grt(p,a[k].r);
else return grt(p,a[k].l);
}
int front(int p){
return kth(grt(p));
}
int back(int p){
return kth(bd(p));
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int Q;
cin>>Q;
while(Q--){
int op;
cin>>op;
if(op==1){int x;cin>>x;insert(x,rt);}
else if(op==2){int x;cin>>x;erase(x,rt);}
else if(op==3){int x;cin>>x;cout<<grt(x)+1<<endl;}
else if(op==4){int x;cin>>x;cout<<kth(x)<<endl;}
else if(op==5){int x;cin>>x;cout<<front(x)<<endl;}
else if(op==6){int x;cin>>x;cout<<back(x)<<endl;}
// zxblll(rt);
// cout<<endl;
}
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 11
Accepted
time: 3ms
memory: 3288kb
input:
20 1 964673 5 968705 4 1 3 964673 5 965257 1 915269 1 53283 3 964673 3 53283 3 53283 1 162641 5 9739...
output:
964673 964673 1 964673 3 1 1 964673 964673
result:
ok 9 numbers
Test #2:
score: 0
Wrong Answer
time: 4ms
memory: 3440kb
input:
50 1 577793 1 408221 1 880861 2 408221 1 460353 1 223489 6 577713 4 2 5 889905 2 880861 1 100033 1 7...
output:
577793 408221 880861 577793 577793 100033 22575 22575 2 100033 577793 632329 643621 5 7 16 737721
result:
wrong answer 2nd numbers differ - expected: '460353', found: '408221'
Test #3:
score: 0
Wrong Answer
time: 0ms
memory: 3616kb
input:
100 1 914241 1 639471 5 917713 6 912745 1 234811 1 297728 3 297728 1 6927 5 645391 1 664569 2 914241...
output:
914241 914241 2 639471 842266 6927 868271 297728 568845 639471 11 286545 234811 11 531105 473089 531...
result:
wrong answer 14th numbers differ - expected: '9', found: '11'
Test #4:
score: 0
Wrong Answer
time: 0ms
memory: 3472kb
input:
1000 1 543050 1 599175 6 538214 1 208361 1 415495 1 376755 5 599771 6 415415 1 460416 3 599175 1 413...
output:
543050 599175 415495 6 599175 3 460416 430219 543050 8 838037 413857 543050 413857 14 17 60423 46041...
result:
wrong answer 22nd numbers differ - expected: '915417', found: '705510'
Test #5:
score: 0
Wrong Answer
time: 40ms
memory: 3920kb
input:
10000 1 27217 5 30155 4 1 1 454393 6 453417 1 311109 1 172817 1 303817 1 446169 1 674881 4 1 6 44439...
output:
27217 27217 454393 27217 446169 172817 311109 674881 311109 454393 665393 665393 13 180795 674881 76...
result:
wrong answer 6th numbers differ - expected: '303817', found: '172817'
Test #6:
score: 0
Wrong Answer
time: 113ms
memory: 6420kb
input:
50000 1 5227 6 -1792 6 445 1 175483 2 5227 1 562399 2 175483 1 956113 4 1 1 487125 1 851001 1 233057...
output:
5227 5227 175483 4 175483 4 40129 487125 4 40129 508946 9 325529 3 22 275201 487125 319065 487125 56...
result:
wrong answer 3rd numbers differ - expected: '562399', found: '175483'
Test #7:
score: 0
Wrong Answer
time: 306ms
memory: 6116kb
input:
100000 1 288297 1 535013 3 288297 1 457318 2 457318 3 535013 1 103045 1 964881 1 514921 1 640601 1 5...
output:
1 3 2 288297 103045 6 9 103045 524478 15 3 3 524478 4 294605 612362 199958 294605 535013 26 847953 4...
result:
wrong answer 2nd numbers differ - expected: '2', found: '3'
Test #8:
score: 0
Wrong Answer
time: 428ms
memory: 6400kb
input:
100000 1 634561 6 630913 1 254516 6 630481 1 966881 1 18529 1 873593 3 254516 2 966881 3 254516 4 1 ...
output:
634561 634561 2 2 18529 18529 634561 634561 2 18529 6 688929 74233 16 11 748437 18529 748437 8 16 79...
result:
wrong answer 9th numbers differ - expected: '1', found: '2'
Test #9:
score: 0
Wrong Answer
time: 299ms
memory: 6508kb
input:
100000 1 104152 1 405622 4 2 1 564237 1 290523 1 441856 1 910218 1 97083 1 104393 1 485841 3 910218 ...
output:
405622 9 290523 97083 9 104152 314173 16 405622 1 86501 86501 441856 314173 290523 874917 333729 851...
result:
wrong answer 5th numbers differ - expected: '7', found: '9'