poj 2828 线段树单点更新

原创 2015年07月09日 20:23:47

      类似于权值线段树?,就是翻过来插入,单点存当前区间空位置的个数


贴代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#define M 200010
#define ls t*2
#define rs t*2+1


using namespace std;
struct Node
{
    int s,l,r;
} a[M*4];
int id,pos[M],val[M],ans[M],n;
void build(int l,int r,int t)
{
    a[t].l=l,a[t].r=r,a[t].s=r-l+1;
    if(l==r)
        return ;
    int mid=(l+r)>>1;
    build(l,mid,ls);
    build(mid+1,r,rs);
}
void update(int p,int t)
{
    a[t].s--;
    if(a[t].l==a[t].r)
    {
        id=a[t].l;
        return ;

    }
    if(a[ls].s>=p)
    {
        update(p,ls);
    }
    else
    {
        update(p-a[ls].s,rs);
    }
}

int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        build(1,n,1);
        for(int i=1; i<=n; i++)
        {
            scanf("%d%d",&pos[i],&val[i]);
        }
        for(int i=n; i>=1; i--)
        {
            update(pos[i]+1,1);
            ans[id]=val[i];
        }
        for(int i=1; i<=n; i++)
        {
            if(i!=n)
                printf("%d ",ans[i]);
            else
                printf("%d\n",ans[i]);
        }
    }
    return 0;
}


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

题意: 有n个的排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos。要求把队伍最后的状态输出。 解析: 逆向思维。我们可以这样考虑,最后一个人一定会得到当前队伍...

POJ2828 Buy Tickets 【线段树】+【单点更新】+【逆序】

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 12296   A...

POJ 2828 Buy Tickets (线段树单点更新)

Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 10957 Accepted: 5338 Descr...

线段树(单点更新)poj2828

题意: 输入n个有序对 pi表示在第pi个位置后面插入一个值为vi的人,并且pi是不降的。 输出最终得到的v的序列。 线段树,记录区间内的空位置数,反过来将人插入到序列中。 #include ...

POJ—2828—Buy_Tickets—【数据结构】【线段树】【单点更新】

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 14512   A...

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

点击打开链接 比较裸的线段树,主要在能不能想到(。ì _ í。) /* 思路: 设当前节点为root,其左孩子为lchild,右孩子为rchild,节点的存放变量为val,待插入数值为value....
  • Q_smell
  • Q_smell
  • 2017年04月07日 21:21
  • 100

【poj】2828 Buy Tickets、2182 Lost Cow(线段树-单点更新)

题目大意:人们一个一个的来排队并插队,按人到来的顺序给出每个人插队的位置(插在第几个人后面),并告知每个人的id号,输出最终队伍的情况。 思路:这道题假如你正向去处理的话,会发现,当你确定一个位置的...

POJ 2828 Buy Tickets (线段树 单点更新-查找第k大元素)

题目链接POJ2828题目大意火车站有n(n≤\le200000)个人要排队,它们是按顺序到达,到达后要插队,现在告诉你每个人每次插队排在当前队伍第几个人的后面以及它们的权值,输出最终队伍的权值序列。...

poj2828 Buy Tickets 线段树,单点更新

题目链接:http://poj.org/problem?id=2828

poj2828(线段树单点更新)

题意不说了。思路是将人倒叙插入,线段树各个区间的值代表前面有多少个空位。 #include #include #include #include #include #i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 2828 线段树单点更新
举报原因:
原因补充:

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