• CHOI1301 邻值查找


    那个写平衡树是不可能写平衡树,这辈子都不可能写平衡树。只有链表才能维持的了生命。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5,inf=2147483647;
    typedef pair<int,int> P;
    P a[N];
    int b[N],b2[N],cnt=2,head=1,tail=2,ans1[N],ans2[N];
    struct edge{
        int value,next,pre;
    }e[N];
    void ins(int pos,int x){// 在pos位置后面加一个数X
        e[++cnt].value=x;
        e[cnt].next=e[pos].next;
        e[cnt].pre=pos; 
        e[e[pos].next].pre=cnt;
        e[pos].next=cnt;
    }
    void del(int pos){
        e[e[pos].next].pre=e[pos].pre;
        e[e[pos].pre].next=e[pos].next;
    }
    int main(){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i)scanf("%d",&a[i].first),a[i].second=i;
        sort(a+1,a+1+n);
        e[head].next=tail;e[tail].pre=head;
        for(int i=1;i<=n;++i){ins(e[tail].pre,a[i].first);b[a[i].second]=cnt;b2[cnt]=a[i].second;}
        for(int i=n;i>=2;--i){
            ans1[i]=inf;
            if(e[b[i]].next!=tail)ans1[i]=min(ans1[i],abs(e[b[i]].value-e[e[b[i]].next].value)),ans2[i]=b2[e[b[i]].next];
            if(e[b[i]].pre!=head)if(ans1[i]>=abs(e[b[i]].value-e[e[b[i]].pre].value))ans1[i]=abs(e[b[i]].value-e[e[b[i]].pre].value),ans2[i]=b2[e[b[i]].pre];
            del(b[i]);
        }
        for(int i=2;i<=n;++i)printf("%d %d
    ",ans1[i],ans2[i]);
        return 0;
    }
    View Code
  • 相关阅读:
    谷歌三架马车之 The Google File System 中文版
    数据集市 Data Mart
    VMware虚拟机ubuntu下安装VMware Tools步骤
    NOIP普及组 海港 题解
    HXD的DS
    离散化
    哈希表
    状态压缩DP 初探
    《信息学奥赛一本通》大盗阿福 题解
    NOIP 加工零件 题解
  • 原文地址:https://www.cnblogs.com/Dream-Runner/p/10155571.html
Copyright © 2020-2023  润新知