zoukankan      html  css  js  c++  java
  • poj 2828 Buy Tickets (简单线段数)

    又一道线段树的题~~很简单的一道题,用数组建树很容易理解线段树的内部结构~~

    题目大意:有N个人排队,给出他们想插队的位置和他们的标识,问最后的序列是怎样的。

    看代码吧:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    int f[1000005];
    int pos[200004],val[200004],s[200004];
    int n;

    void built(int t,int lc,int rc)//建树过程
    {
    f[t]=rc-lc+1;//保存n前面有多少空位
    if(lc==rc)
    return ;
    int mid=(lc+rc)/2;
    built(2*t,lc,mid);
    built(2*t+1,mid+1,rc);
    }

    void insert(int p,int v,int t,int lc,int rc)
    {
    f[t]--;
    if(lc==rc)
    {
    s[lc]=v;
    return ;
    }
    int mid=(lc+rc)/2;
    if(p<=f[2*t])
    insert(p,v,2*t,lc,mid);
    else
    {
    p-=f[2*t];//减去前面的空位数
    insert(p,v,2*t+1,mid+1,rc);
    }
    }

    int main()
    {
    int i,j;

    while(scanf("%d",&n)!=EOF)
    {
    for(i=0;i<n;i++)
    {
    scanf("%d%d",&pos[i],&val[i]);
    pos[i]++;//使所有位置从1开始
    }
    built(1,1,n);
    for(i=n-1;i>=0;i--)
    insert(pos[i],val[i],1,1,n);
    for(i=1;i<=n;i++)
    {
    if(i==1)
    printf("%d",s[i]);
    else
    printf(" %d",s[i]);
    }
    printf("\n");
    }
    return 0;
    }



     

  • 相关阅读:
    nodejs websocket
    [Java] 数组-01 入门
    [Java] 第一,二章 配置, 基础
    [Java] 第四章 异常机制
    [Java] 第三章 面向对象总结
    [Java] 接口-02
    [Java] 接口-01
    [Java] final 关键字
    [Java] 抽象类
    [Java] 多态-01
  • 原文地址:https://www.cnblogs.com/misty1/p/2431100.html
Copyright © 2011-2022 走看看