poj 2828 线段树 单点更新

原创 2016年05月31日 00:28:55

题意:有N个人排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos后面。要求把队伍最后的状态输出。

题解:一看到这种题目如果之前做过类似的题目很容易就可以想到要倒序完成 因为这样每个数插入的位置在当前都是可以确定的,sum记录当前线段的空位数

#include<cstdio>
#include<cstring>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N=200000;
int x[N],y[N],res[N],sum[N<<2];
void build(int l,int r,int rt)
{
    if(l==r) {sum[rt]=1;return;}
    sum[rt]=r-l+1;
    int mid=(l+r)>>1;
    build(lson);
    build(rson);
}
int query(int p,int l,int r,int rt)
{
    if(l==r) {sum[rt]=0;return l;}
    int pos,mid=(l+r)>>1;
    if(sum[rt<<1]>=p) pos=query(p,lson);
    else pos=query(p-sum[rt<<1],rson);
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
    return pos;
}
int main()
{//freopen("C:\\Users\\Administrator\\Desktop\\input.txt","r",stdin);
    int n;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++)
            scanf("%d%d",&x[i],&y[i]);
        build(1,n,1);
        for(int i=n-1;i>=0;i--){
            int pos=query(x[i]+1,1,n,1);
            res[pos]=y[i];
        }
        for(int i=1;i<=n;i++)
            printf("%d%c",res[i],i==n?'\n':' ');
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 2828(线段树 单点更新)

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 16466   A...
  • a73265
  • a73265
  • 2015年10月27日 23:12
  • 148

poj 2828 线段树单点更新

类似于权值线段树?,就是翻过来插入,单点存当前区间空位置的个数 贴代码: #include #include #include #define M 200010 #define ls t*...
  • DJS_K_D
  • DJS_K_D
  • 2015年07月09日 20:23
  • 314

POJ 2828 (线段树-单点更新)

Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must ge...
  • Lcc_2016
  • Lcc_2016
  • 2016年08月17日 08:44
  • 905

线段树单点更新——POJ 2828

对应POJ题目:点击打开链接
  • u013351484
  • u013351484
  • 2014年10月08日 16:54
  • 371

POJ 2828 线段树单点更新

POJ 2828 题解:这题最巧的是, 最后一个人的顺序是固定的, 反向更新运用线段树比较简单。 比如, 最后一名选在第i个人后面, 那么他的位置就是i +...
  • ADjky
  • ADjky
  • 2016年09月17日 16:12
  • 148

poj 2828 线段树+单点更新

题目: Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 19511   Accepte...
  • xiaoli_nu
  • xiaoli_nu
  • 2017年02月28日 20:34
  • 193

poj 2828(线段树单点更新)

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 18822   A...
  • huyiqun753
  • huyiqun753
  • 2016年10月09日 15:50
  • 73

线段树之建树,单点更新以及区间查询

线段树之建树,单点更新以及区间查询       线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。      使用线段树可以快速的查找某一个节...
  • ruangongshi
  • ruangongshi
  • 2015年08月09日 11:07
  • 1655

hihocoder算法复习之 线段树单点更新

hihocoder #1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB ...
  • u013497977
  • u013497977
  • 2015年11月16日 18:45
  • 326

线段树详解(单点更新与成段更新\区间更新操作)

本文纯属原创,转载请注明出处,谢谢。 距离第一次接触线段树已经一年多了,再次参加ACM暑假集训,这一次轮到我们这些老家伙们给学弟学妹们讲解线段树了,所以就自己重新把自己做过的题目看了一遍,然后写篇博客...
  • u014705673
  • u014705673
  • 2015年07月06日 15:57
  • 6536
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 2828 线段树 单点更新
举报原因:
原因补充:

(最多只允许输入30个字)