poj 2828 Buy Tickets (线段树)
题目:http://poj.org/problem?id=2828
题意:有n个人插队,给定插队的先后顺序和插在哪个位置还有每个人的val,求插队结束后队伍各位置的val。
线段树里比较简单的题目了,点的更新。。
思想是 从后向前插入,用num存储 每一段剩余的位置。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int maxn = + ;
int n, pos[maxn], val[maxn], ans[maxn]; struct node
{
int l, r, num;
}tr[*maxn]; void build(int t, int l, int r) //建树
{
tr[t].l = l; tr[t].r = r;
if(tr[t].l == tr[t].r)
{
tr[t].num = ; //初始每一个剩余的位置为1
return;
}
int mid = (l+r)/;
build(*t, l, mid);
build(*t+, mid+, r);
tr[t].num = tr[*t].num + tr[*t+].num;
}
int query(int p, int t)
{
tr[t].num--; //让对应的段的 剩余数减1
if(tr[t].l == tr[t].r)
return tr[t].l;
if(tr[*t].num >= p) //如果左子树剩余数大于 要插入的位置就往左插入。
return query(p, *t);
else
return query(p - tr[*t].num, *t+);
}
int main()
{
int i, x;
while(~scanf("%d", &n))
{
memset(tr, , sizeof(tr));
build(, , n);
for(i = ; i <= n; i++)
scanf("%d%d", &pos[i], &val[i]); for(i = n; i >= ; i--)
{
x = query(pos[i]+, ); //题目是从0开始的
ans[x] = val[i]; //让返回的位置 对应 val
}
for(i = ; i < n; i++)
printf("%d ",ans[i]);
if(n >= )
printf("%d\n",ans[i]);
}
return ;
}
poj 2828 Buy Tickets (线段树)的更多相关文章
- poj 2828 Buy Tickets (线段树(排队插入后输出序列))
http://poj.org/problem?id=2828 Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissio ...
- POJ 2828 Buy Tickets (线段树 or 树状数组+二分)
题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的. 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容 ...
- POJ 2828 Buy Tickets 线段树 倒序插入 节点空位预留(思路巧妙)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 19725 Accepted: 9756 Desc ...
- POJ 2828 Buy Tickets | 线段树的喵用
题意: 给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数; 最后输出1~n的权值 题解: 首先可以发现,最后一次插入的位置是准确的位置 所以这个就变成了若干个子问题, 所以 ...
- POJ 2828 Buy Tickets(线段树·插队)
题意 n个人排队 每一个人都有个属性值 依次输入n个pos[i] val[i] 表示第i个人直接插到当前第pos[i]个人后面 他的属性值为val[i] 要求最后依次输出队中各个人的属性 ...
- POJ 2828 Buy Tickets(线段树单点)
https://vjudge.net/problem/POJ-2828 题目意思:有n个数,进行n次操作,每次操作有两个数pos, ans.pos的意思是把ans放到第pos 位置的后面,pos后面的 ...
- POJ - 2828 Buy Tickets (段树单点更新)
Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...
- POJ 2828 Buy Tickets(排队问题,线段树应用)
POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意: 排队买票时候插队. 给出一些数对,分别代表某个人的想要插入的位 ...
- poj 2828 Buy Tickets(树状数组 | 线段树)
题目链接:poj 2828 Buy Tickets 题目大意:给定N,表示有个人,给定每一个人站入的位置,以及这个人的权值,如今按队列的顺序输出每一个人的权值. 解题思路:第K大元素,非常巧妙,将人入 ...
随机推荐
- How to: Add Missing ContentPlaceHolder
In Microsoft SharePoint Server 2010, the BlueBand master page is not supported in the Search Center ...
- div+css布局细节问题
cursor: pointer;在chrome里支持,hand不支持
- 两行代码搞定UITableView无数据无网络显示-b
不知是否有像我一样的,每次写TableView在监听网络和无数据源时逻辑处理提示视图都是一堆代码,很繁琐也很重复的垃圾代码(可能就只有我这样
- 仿微博视频边下边播之滑动TableView自动播放-b
Tips:这次的内容分为两篇文章讲述01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器.02.[iOS]仿微博视频边下边播之滑动TableView自动播 ...
- android中实现Parcelable序列化步骤
import java.io.Serializable; import java.text.DecimalFormat; import android.os.Parcel; import androi ...
- shell 学习基地
http://blog.csdn.net/column/details/shell-daily-study.html?&page=2
- JAVA Hibernate工作原理及为什么要用(转)
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- UVA 11806 Cheerleaders (组合+容斥原理)
自己写的代码: #include <iostream> #include <stdio.h> #include <string.h> /* 题意:相当于在一个m*n ...
- SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜 ...
- 使用Css截取字符串
white-space:nowrap; /* 禁止自动换行 */ overflow:hidden; /* 隐藏溢出的内容 */ text-overflow:ellipsis; /* 溢出文本使用... ...