题目链接:poj 2828 Buy Tickets

题目大意:给定N,表示有个人,给定每一个人站入的位置,以及这个人的权值,如今按队列的顺序输出每一个人的权值。

解题思路:第K大元素,非常巧妙,将人入队的顺序倒过来看,就是纯第K大问题,然后用树状数组还是线段树就都能够做了。

C++ 线段树
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int maxn = 200005; #define lson(x) ((x)<<1)
#define rson(x) (((x)<<1)+1) struct Node {
int l, r, s;
void set(int l, int r, int s) {
this->l = l;
this->r = r;
this->s = s;
}
}nd[maxn * 4]; int N, val[maxn], pos[maxn], rec[maxn]; void build (int u, int l, int r) {
nd[u].set(l, r, r - l + 1); if (l == r)
return ;
int mid = (l + r) / 2;
build(lson(u), l, mid);
build(rson(u), mid + 1, r);
} int query (int u, int x) {
nd[u].s--; if (nd[u].l == nd[u].r)
return nd[u].l; if (nd[lson(u)].s >= x)
return query(lson(u), x);
else
return query(rson(u), x - nd[lson(u)].s);
} int main () {
while (scanf("%d", &N) == 1) {
build(1, 0, N - 1);
for (int i = 0; i < N; i++)
scanf("%d%d", &pos[i], &val[i]); for (int i = N - 1; i >= 0; i--)
rec[query(1, pos[i] + 1)] = i; printf("%d", val[rec[0]]);
for (int i = 1; i < N; i++)
printf(" %d", val[rec[i]]);
printf("\n");
}
return 0;
}
C++ 树状数组
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxn = 200005;
#define lowbit(x) ((x)&(-x)) int N, fenw[maxn], pos[maxn], val[maxn], rec[maxn]; void add (int x, int v) {
while (x <= N) {
fenw[x] += v;
x += lowbit(x);
}
} int find (int x) {
int p = 0, s = 0;
for (int i = 20; i >= 0; i--) {
p += (1<<i);
if (p > N || s + fenw[p] >= x)
p -= (1<<i);
else
s += fenw[p];
}
return p + 1;
} int main () {
while (scanf("%d", &N) == 1) {
memset(fenw, 0, sizeof(fenw));
for (int i = 1; i <= N; i++) {
add(i, 1);
scanf("%d%d", &pos[i], &val[i]);
} for (int i = N; i; i--) {
int tmp = find(pos[i] + 1);
rec[tmp] = i;
add(tmp, -1);
} for (int i = 1; i <= N; i++)
printf("%d%c", val[rec[i]], i == N ? '\n' : ' ');
}
return 0;
}

poj 2828 Buy Tickets(树状数组 | 线段树)的更多相关文章

  1. POJ 2828 Buy Tickets(排队问题,线段树应用)

    POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意:  排队买票时候插队.  给出一些数对,分别代表某个人的想要插入的位 ...

  2. 树状数组 && 线段树应用 -- 求逆序数

    参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...

  3. 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树

    正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...

  4. hdu1394(枚举/树状数组/线段树单点更新&区间求和)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...

  5. hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. hdu 5147 Sequence II【树状数组/线段树】

    Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...

  7. HDU 3303 Harmony Forever 前缀和+树状数组||线段树

    Problem Description We believe that every inhabitant of this universe eventually will find a way to ...

  8. 数据结构--树状数组&&线段树--基本操作

    随笔目的:方便以后对树状数组(BIT)以及基本线段树的回顾 例题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 例题:hdu 1166 敌兵布阵 T ...

  9. BZOJ_1901_&_ZJU_2112_Dynamic_Rankings_(主席树+树状数组/线段树+(Treap/Splay))

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1901 给出一个长度为n的数列A,有m次询问,询问分两种:1.修改某一位置的值;2.求区间[l, ...

随机推荐

  1. Excel一项研究指出色彩

    Excel一项研究指出色彩 从Office2007跳到了2013版本号,尽管有着种种不适,但应该承认Excel2013版本号在图表和色彩上更加人性化和"专业"了一些. 但假设须要更 ...

  2. Paypal-Express Checkout快捷支付方式的android端开发心得(二)

    一.前导 上一篇讲的不是非常好,这里再又一次讲一下. Paypal手机支付有2种形式: 1.Mobile Express Checkout,MEC,快捷支付 2.MPL 假设採用MEC支付方式,这样的 ...

  3. Android L SDK -- 一些有趣的新功能

    一些普通的就不提了,自己查看最新的文档就可以 文档地址 Task locking 功能:让我们在使用一个应用时,能够免受通知(消息)的打搅. 怎样使用:当我们在应用中激活任务锁模式.我们接收到的通知( ...

  4. python 2.x 与3.x的区别

    下载了点python的电子书,有基于3.x的有基于2.x的让我不知道看哪些好,BD一下差别着实很大有木有?print语句变成了函数有木有?之后都得加括号了有木有? 别人整理的成果,我就无耻地搬来借用啦 ...

  5. (spring-第14回【IoC基础篇】)国际化信息 (转)

    国际化又称为本地化. 当你把手机的language由中文切换到英文时,你的微信也相应改用英语,这就是i18n国际化.一般来说,应用软件提供一套不同语言的资源文件,放到特定目录中,应用根据不同语言的操作 ...

  6. .NET单元测试艺术(2) - 第一个单元测试

    List 2.1 使用[SetUp]和[TearDown]特性 using System; using System.Collections.Generic; using System.Linq; u ...

  7. Preemption Context Switches 和 Synchronization Context Switches

    Preemption Context Switches测量操作系统任务调度线程处理器上执行的次数,以及切换到较高-priority螺纹,数. Synchronization context switc ...

  8. NSIS API 函数常用备份

    原文:NSIS API 函数常用备份 关闭程序: System::Call `user32::AnimateWindow(i$HWNDPARENT,i200,i${AW_BLEND}|${AW_HID ...

  9. Redux管理你的React应用

    使用Redux管理你的React应用   因为redux和react的版本更新的比较频繁,博客园这里用的redux版本是1.0.1,如果你关心最新版本的使用技巧,欢迎来我的Github查看(https ...

  10. 编程算法基础-数字数码管-隐藏password

    作业 数字数码管 个数码管) @@@@         0     @          @       1   2     @          @         3        @@@@    ...