社区讨论

100分 最后一点TLE,求调

P5076【深基16.例7】普通二叉树(简化版)参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m5s9k6y2
此快照首次捕获于
2025/01/11 22:10
去年
此快照最后确认于
2025/11/04 11:44
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const long long N = 1000001;
long long n,root,sum,opt,x;
struct Node {
    long long l,r,s,v,d;
    Node(long long l,long long r,long long s,long long v)
        : l(l),r(r),s(s),v(v),d(1){}
    Node(){}
}t[N];
inline void update(long long root){
    t[root].s = t[t[root].l].s + t[t[root].r].s + t[root].d;
}
long long r(long long x,long long root){
    if(root){
        if(x < t[root].v){
            return r(x,t[root].l);
        }
        if(x > t[root].v){
            return r(x,t[root].r) + t[t[root].l].s + t[root].d;
        }
        return t[t[root].l].s + t[root].d;
    }
    return 1;
}
long long kth(long long x,long long root){
    if(x <= t[t[root].l].s){
        return kth(x,t[root].l);
    }
    if(x <= t[t[root].l].s + t[root].d){
        return t[root].v;
    }
    return kth(x - t[t[root].l].s - t[root].d,t[root].r);
}
void insert(long long x,long long & root){
    if(x < t[root].v){
        if(!t[root].l){
            t[t[root].l = ++sum] = Node(0,0,1,x);
        }else{
            insert(x,t[root].l);
        }
    }else if(x > t[root].v){
        if(!t[root].r){
            t[t[root].r = ++sum] = Node(0,0,1,x);
        }else{
            insert(x,t[root].r);
        }
    }else{
        t[root].d++;
    }
    update(root);
}
int main(){
    cin >> n;
    long long cnt = 0;
    t[root = ++sum] = Node(0,0,1,2147483647);
    while(n--){
        cin >> opt >> x;
        cnt++;
        if(opt == 1){
            cout << r(x,root) << endl;
        }else if(opt == 2){
            cout << kth(x,root) << endl;
        }else if(opt == 3){
            cout << kth(r(x,root) - 1,root) << endl;
        }else if(opt == 4){
            cout << kth(r(x + 1,root),root) << endl;
        }else{
            cnt--;
            insert(x,root);
        }
    }
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...