玄学 MLE 求助,三个关注
查看原帖
玄学 MLE 求助,三个关注
507348
__vector__楼主2023/3/1 23:18

RT.
第一条语句执行前就挂了

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,m;
struct Node
{
    int ls,rs;
    int dist,val,ord;
    bool operator > (const Node& b)const
    {
        if(val==b.val)return ord>b.ord;
        return val>b.val;        
    }
}tree[maxn];
int root[maxn];
int del[maxn];
int merge(int x,int y)
{
    if(!x||!y)return x+y;
    if(tree[x]>tree[y])swap(x,y);
    tree[x].rs=merge(tree[x].rs,y);
    if(tree[tree[x].ls].dist<tree[tree[x].rs].dist)
    {
        swap(tree[x].ls,tree[x].rs);
    }
    tree[x].dist=tree[tree[x].rs].dist+1;
    return x;
}
int find(int x)
{
    return root[x]==x?x:root[x]=find(root[x]);
}
int main()
{
    scanf("%d%d",&n,&m);
 //   printf("(%d,%d)\n",n,m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&tree[i].val);
        tree[i].ord=i;
        root[i]=i;
    }
    int op,x,y;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&op,&x);
     //   printf("i: %d (%d,%d)\n",i,op,x);;
        if(op==1)
        {
            scanf("%d",&y);
            if(del[x]||del[y])continue;
            int findx=find(x);
            int findy=find(y);
            if(findx==findy)continue;
            root[x]=root[y]=merge(findx,findy);
        }
        if(op==2)
        {
            if(del[x])
            {
                puts("-1");
                continue;
            }
            int findx=find(x);
            printf("%d\n",tree[findx].val);
            del[findx]=1;
            root[findx]=merge(tree[findx].ls,tree[findx].rs);
            tree[findx].ls=tree[findx].rs=tree[findx].dist=0;
        }
    }
    return 0;
}  
2023/3/1 23:18
加载中...