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;
    }



     

  • 相关阅读:
    【转】Shell编程基础篇-上
    【转】inotify+rsync实现实时同步
    Spring
    jdk,jre,tommcat配置问题
    Java前后台开发
    前端组件学习(一)
    报表工具进阶(二)
    查询时异步刷新问题--用到了ajax
    学习jaspersoft/JasperReport
    利用SQLYog操作数据库mysql
  • 原文地址:https://www.cnblogs.com/misty1/p/2431100.html
Copyright © 2011-2022 走看看