关于pbds中平衡树join使用的疑问
  • 板块学术版
  • 楼主Kazeno_Akina
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/10/10 14:29
  • 上次更新2023/11/2 14:40:44
查看原帖
关于pbds中平衡树join使用的疑问
612567
Kazeno_Akina楼主2023/10/10 14:29

现在我获得了一份报错:

terminate called after throwing an instance of '__gnu_pbds::join_error'
  what():  __gnu_pbds::container_error
Aborted (core dumped)

代码如下:

#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;
const int N=1e5+5;
struct node{
  int fa,p,ans;
  vector<int> ch;
  tree<int,null_type,greater<int>,rb_tree_tag,tree_order_statistics_node_update> chcnt;
};
int n;
node tr[N];
void s(int p){
  for(int i=0;i<tr[p].ch.size();++i) s(tr[p].ch[i]);
  for(int i=0;i<tr[p].ch.size();++i) tr[p].chcnt.join(tr[tr[p].ch[i]].chcnt);
  tr[p].ans=tr[p].chcnt.order_of_key(tr[p].p);
  cerr << p << ' ' << tr[p].ans << endl;
  tr[p].chcnt.insert(tr[p].p);
}
int main(){
  cin >> n;
  for(int i=1;i<=n;++i) cin >> tr[i].p;
  for(int i=2;i<=n;++i) cin >> tr[i].fa,tr[tr[i].fa].ch.push_back(i);
  cerr << endl;
  s(1);
  for(int i=1;i<=n;++i) cout << tr[i].ans << '\n';
  return 0;
}

求问为什么会有这样的报错阿qwq

2023/10/10 14:29
加载中...