CHOI1301 邻值查找

Posted dream-runner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于CHOI1301 邻值查找的主要内容,如果未能解决你的问题,请参考以下文章

CH1301 邻值查找set应用

136. 邻值查找set lower_bound

CHOI 1401 兔子与兔子

从另一个活动的活动中的片段传递数据

猫鼬从模型中的数组中查找对象

Android:在片段内膨胀自定义视图