码迷,mamicode.com
首页 > 其他好文 > 详细

0x13 链表与邻接表

时间:2018-07-02 11:04:47      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:play   技术分享   display   mil   alt   stream   eve   onclick   std   

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

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

技术分享图片
#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\n",as[i],pr[i]);
    return 0;
}
邻值查找

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

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

0x13 链表与邻接表

标签:play   技术分享   display   mil   alt   stream   eve   onclick   std   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!