栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2201 Cartesian Tree

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2201 Cartesian Tree

#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>using namespace std;const int N=50005;struct Treap_Node{    int left,right;    int value,pri,id;}Tnode[N];int ans[N][3];void dfs(int now){    if(now==-1)        return;    int id=Tnode[now].id,ll=Tnode[now].left,rr=Tnode[now].right;    if(ll!=-1)    {        ans[id][1]=Tnode[ll].id;        ans[Tnode[ll].id][0]=id;        dfs(ll);    }    if(rr!=-1)    {        ans[id][2]=Tnode[rr].id;        ans[Tnode[rr].id][0]=id;        dfs(rr);    }}struct data{    int v,p,id;    bool operator<(const data ≠)const    {        return v<ne.v;    }}po[N];int stk[N],top;int main(){    int n;    scanf("%d",&n);    memset(ans,0,sizeof(ans));    for(int i=1; i<=n; i++)    {        scanf("%d%d",&po[i].v,&po[i].p);        po[i].id=i;    }    sort(po+1,po+n+1);    Tnode[0].left=Tnode[0].right=-1;    Tnode[0].pri=-10000000;    top=1;    stk[0]=0;    for(int i=1;i<=n;i++)    {        int v=po[i].v,p=po[i].p,d=po[i].id;        while(top>0&&Tnode[stk[top-1]].pri>p) top--;        Tnode[i].left=Tnode[stk[top-1]].right;        Tnode[stk[top-1]].right=i;        Tnode[i].right=-1;        Tnode[i].value=v;        Tnode[i].pri=p;        Tnode[i].id=d;        stk[top++]=i;    }    dfs(0);    printf("YESn");    for(int i=1; i<=n; i++)        printf("%d %d %dn",ans[i][0],ans[i][1],ans[i][2]);    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/365858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号