不知道为什么,数组应该没有越界
#include<cstdio>
#include<iostream>
#include<bits/extc++.h>
//#define ts printf("PASS\n")
using namespace std;
struct node
{
int id;
int value;
bool operator < (const node &a)const
{
return value>a.value;
}
};
__gnu_pbds::priority_queue<node> q[2000001];
bool death[2000001];
int score[2000001];
int pointed[2000001];
int n,m;
int find(int x)
{
if(pointed[x]!=x)
{
pointed[x] = find(pointed[x]);
}
return pointed[x];
}
int main()
{
int i,j;
cin>>n;
for(i=1;i<=n;i++)
{
node soilder;
cin>>soilder.value;
soilder.id = i;
q[i].push(soilder);
pointed[i] = i;
}
cin>>m;
for(i=1;i<=m;i++)
{
// ts;
char str;
cin>>str;
// ts;
if(str=='K')
{
// ts;
int x;
cin>>x;
if(death[x])
{
// ts;
printf("0\n");
}
else
{
// ts;
int px = find(x);
// ts;
// printf("%d\n",px);
node top = q[px].top();
printf("%d\n",top.value);
death[top.id] = true;
q[px].pop();
}
}
else
{
int a,b;
cin>>a>>b;
if((death[a]||death[b])||a==b)
{
continue;
}
else
{
int pa = find(a);
int pb = find(b);
q[pa].join(q[pb]);
pointed[pb] = pointed[pa];
}
}
}
}