0x13 链表与邻接表

这东西我还是有点会玩的啊。。

邻值查找这东西不就是维护个前驱后继嘛。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;

struct node
{
    int x,id;
}a[110000];
bool cmp(node n1,node n2){return n1.x<n2.x;}
int p[110000];
int bef[110000],aft[110000];
int as[110000],pr[110000];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i].x), a[i].id=i;
    sort(a+1,a+n+1,cmp);
    
    for(int i=1;i<=n;i++)p[a[i].id]=i,bef[i]=i-1,aft[i]=i+1;
    
    for(int i=n;i>=2;i--)
    {
        int t=p[i];as[i]=2147483647;
        if(bef[t]!=0)
        {
            int d=abs(a[t].x-a[bef[t]].x);
            if(d<as[i])
                as[i]=d, pr[i]=a[bef[t]].id;
        }
        if(aft[t]!=n+1)
        {
            int d=abs(a[t].x-a[aft[t]].x);
            if(d<as[i])
                as[i]=d, pr[i]=a[aft[t]].id;
        }
        aft[bef[t]]=aft[t];
        bef[aft[t]]=bef[t];
    }
    
    for(int i=2;i<=n;i++)printf("%d %d
",as[i],pr[i]);
    return 0;
}
邻值查找

好的结果今天看一看下一题就是running median心态崩了,昨天才和苏大佬和林肯口胡了这题的链表做法。。。不做了。。。简直莫名其妙。。。

邻接表。。。还有人不会,吗。。。

原文地址:https://www.cnblogs.com/AKCqhzdy/p/9252121.html