Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#105#8. 【模板】普通平衡树wuenzi111193ms6508kbC++232.9kb2025-04-16 22:12:232025-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'