rt,好多次了,每次都全RE不知道为啥。是因为树的合并必须手写吗?
RE信息:Runtime Error. Received signal 6: Aborted / IOT trap.
#include<iostream>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
tree<pair<int,int>,null_type,less<pair<int,int> >,rb_tree_tag,tree_order_statistics_node_update> tr[100005];
int fa[100005];
int find(int a)
{
return fa[a]==a?a:fa[a]=find(fa[a]);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
fa[i]=i;
int x;
cin>>x;
tr[i].insert({x,i});
}
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
int fx=find(x),fy=find(y);
tr[fx].join(tr[fy]);
fa[fy]=fx;
}
int q;
cin>>q;
for(int i=1;i<=q;i++)
{
char op;
cin>>op;
if(op=='Q')
{
int x,y;
cin>>x>>y;
int fx=find(x);
if(y>tr[fx].size())
{
cout<<-1<<"\n";
continue;
}
cout<<tr[fx].find_by_order(y-1)->second<<"\n";
}
else
{
int x,y;
cin>>x>>y;
int fx=find(x),fy=find(y);
if(fx==fy)
{
continue;
}
tr[fx].join(tr[fy]);
fa[fy]=fx;
}
}
}