poj2828-Buy Tickets

题目链接 http://vjudge.net/problem/POJ-2828

解题思路

好吧。。。感觉跟Lost Cow那道题好像。。。

然后稀里糊涂地过了。。。3500+ms(时限4s(⊙﹏⊙)b)

线段树。。。单点

代码

#include<stdio.h>
#include<string.h>
#define MAX_SIZE 200010
struct node {
    int left, right;
    int num;
};
struct person {
    int index;
    int value;
};
node tree[4*MAX_SIZE];
person que[MAX_SIZE];
int ans[MAX_SIZE];
void Build(int root, int l, int r)
{
    tree[root].left = l; tree[root].right = r;
    tree[root].num = r - l + 1;
    if(l == r) return ;
    int mid = (l + r) / 2;
    Build(root*2, l, mid);
    Build(root*2+1, mid+1, r);
}
int query(int root, int pos)
{
    tree[root].num--;
//    int mid = (tree[root].left + tree[root].right) / 2;
    if(tree[root].left == tree[root].right)
        { return tree[root].left; }
    if(pos <= tree[root*2].num) return query(root*2, pos);
    else return query(root*2+1, pos - tree[root*2].num);
}
int main()
{
    int n;
    while(scanf("%d", &n) == 1) {
        Build(1, 1, n);
        for(int i=1; i<=n; i++) {
            int x, y;
            scanf("%d%d", &x, &y);
            que[i].index = x;
            que[i].value = y;
        }
        for(int i=n; i>=1; i--) {
            int where = query(1, que[i].index+1);
            ans[where] = que[i].value;
        }
        for(int i=1; i<=n; i++)
            printf(i==n?"%d\n":"%d ", ans[i]);
    }
    return 0;
}
时间: 2024-11-03 22:39:31

poj2828-Buy Tickets的相关文章

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

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 12296   Accepted: 6071 Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue- The Lunar New Year wa

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

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 12930   Accepted: 6412 Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue… The Lunar New Year wa

[POJ2828] Buy Tickets(待续)

[POJ2828] Buy Tickets(待续) 题目大意:多组测试,每组给出\(n\)条信息\((a,b)\),表示\(b\)前面有\(a\)个人,顺序靠后的信息优先级高 Solution.1 由后向前看,每个遇到的都是确定位置的,最后的人选定的位置不会改变,同样因为是倒叙输入,在第\(i\)个人后插队,也就是说他的前面一定要留下\(i\)个空格. 形象一点就是这样: 从后往前,去查找第一个大于所需要空白的位置.用线段树维护空格数目即可 Code.1 #include <iostream>

POJ2828 Buy Tickets[树状数组第k小值 倒序]

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 19012   Accepted: 9442 Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue… The Lunar New Year wa

poj2828 buy tickets(线段树单点更新)

题目链接: huangjing 思路: 因为给出了n条插入,所以如果正推的话,那么后面插的会影响到最后所在的位置,所以考虑逆序解决,那么如果此人站在第i个人的位置,那么这个人前面必然有i个空位置没占,因为是从后向前考虑的,所以每次更新的时候就要考虑在前面存在i个空位的位置后插入这个人,那么最后得到的序列就是满足条件的.. 题目: Language: Default Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submis

poj2828 Buy Tickets (线段树 插队问题)

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 22097   Accepted: 10834 Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue… The Lunar New Year w

POJ2828 Buy Tickets 树状数组

Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue… The Lunar New Year was approaching, but unluckily the Little Cat still had schedules going here and there. Now, he ha

[POJ2828]Buy Tickets(线段树,单点更新,二分,逆序)

题目链接:http://poj.org/problem?id=2828 由于最后一个人的位置一定是不会变的,所以我们倒着做,先插入最后一个人. 我们每次处理的时候,由于已经知道了这个人的位置k,这个位置表明,在他之前一定有k个空位,于是将他插在第k+1个位置上.我们可以在线段树上直接二分,根据这个位置,假如这个位置在左子树上,那么一直向左走,否则要减掉左子树剩下的位置后再向右边走,同时更新沿途非叶节点的空闲位置数量(减一),手工画一下图就知道了. 1 /* 2 ━━━━━┒ギリギリ♂ eye!

poj2828 Buy Tickets——倒序处理

题目:http://poj.org/problem?id=2828 这题可以倒序来做,因为越靠后的人实际上优先级越高: 用0和1表示这个位置上是否已经有人,0表示有,1表示没有,这样树状数组维护前缀和表示这个位置前面有多少个空位置: 每插入一个人,找到前面空位置恰好是他要求的个数的那个位置,就是他最终站的位置(若位置不空则表示后面的人之后插队到他前面了,所以他被挤到后面去): 找到位置后把该位置的值赋成0,表示这里也站了人,倒着处理即可. 代码如下: #include<iostream> #i

【poj2828】Buy Tickets 线段树 插队问题

[poj2828]Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue… The Lunar New Year was approaching, but unluckily the Little Cat still had schedules going here