POJ 2828

还是弱啊。思维是个好东西。。。

刚开始想来想去用线段树存人的话不仅超时,而且存不下。。。居然是存空位!

sum[]数组存这个序列空位个数,然后逆序遍历。逆序好理解,毕竟最后一个人插进来位置已经可以确定了,前面的位置就根据他来更新。

 #include<iostream>
#include<cstdio>
#define mid int m=(l+r)>>1
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int maxn=;
int sum[maxn<<],ans[maxn<<];
int N,p[maxn],v[maxn]; void Build(int l,int r,int rt)//建树存空位
{
sum[rt]=r-l+;//初始建树时线段对应的空位数就是线段长度(点看成长度为1的线段)
if(l==r) return;
mid;
Build(lson);
Build(rson);
} void PushUp(int rt)
{
sum[rt]=sum[rt<<]+sum[rt<<|];
} void Update(int pos,int val,int l,int r,int rt)
{
if(l==r){
ans[l]=val;//递归到节点,用ans[]数组记录第l个人的val值。
sum[rt]--;//空位数减1
return;
}
mid;
if(pos<=sum[rt<<]) Update(pos,val,lson);//如果当前节点左孩子的空位数足够,就递归左孩子
else Update(pos-sum[rt<<],val,rson);//如果左孩子的空位数不够,那么就递归又孩子,但空位数要变成pos-sum[rt<<1]
PushUp(rt);//向上更新父节点的空位数
} int main()
{
while(scanf("%d",&N)==)
{
Build(,N,);
for (int i=;i<=N;i++) scanf("%d%d",&p[i],&v[i]);
for (int i=N;i>=;i--){
Update(p[i]+,v[i],,N,);//逆序遍历
}
for (int i=;i<N;i++) printf("%d ",ans[i]);
printf("%d\n",ans[N]);
}
return ;
}

poj 2828

poj 2828【线段树 单点更新】的更多相关文章

  1. poj 2828(线段树单点更新)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 18561   Accepted: 9209 Desc ...

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

    倒着插,倒着插,这道题是倒着插! 想一下如果 Posi 里面有若干个0,那么排在最前面的一定是最后一个0. 从后往前看,对于第i个数,就应该插在第Posi + 1个空位上,所以用线段树来维护区间空位的 ...

  3. POJ 2828 线段树单点更新 离线搞

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  4. POJ 2886 线段树单点更新

    转载自:http://blog.csdn.net/sdj222555/article/details/6878651 反素数拓展参照:http://blog.csdn.net/ACdreamers/a ...

  5. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  6. POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10575   Accepted: 5489 Descrip ...

  7. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  8. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  9. HDU 1754 I Hate It 线段树单点更新求最大值

    题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...

  10. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

随机推荐

  1. JS数组的相关方法

    数组创建 JavaScript中创建数组有两种方式,第一种是使用 Array 构造函数: ? 1 2 3 var arr1 = new Array(); //创建一个空数组 var arr2 = ne ...

  2. Cors之带凭据的请求

    带凭据的请求 默认情况下,跨源请求不提供凭据.通过将withCredentials属性设置为true,可以制定某个请求应该发送凭据.

  3. CesiumLab V1.3 新功能 MAX场景处理(免费Cesium处理工具集)

    每次到写文章的时候就很高兴,意味着又有重大功能更新了,也意味着10多天昏天黑地的闭关日子暂时结束了. 依照惯例,先放图   小范围精模型cesium加载效果   大范围白模cesium加载效果     ...

  4. Spring Boot邮件功能

    1.应用场景 邮件功能的应用场景可谓十分广泛,诸如注册用户.密码找回,消息通知.以及一些程序异常通知等都需要使用到该功能. 正是由于邮件功能的使用广泛,因此springboot也加在它的组件中添加了邮 ...

  5. day37 04-Hibernate二级缓存:list和iterate方法比较

    get()和load()方法既可以向一级缓存区放数据,也可以向二级缓存区放数据.这是查询一个的情况.要是查询所有呢?注意, // 查询所有.Query接口的list()方法. // list()方法会 ...

  6. 2019-3-1-安装-Sureface-Hub-系统-Windows-10-team-PPIPro-系统

    title author date CreateTime categories 安装 Sureface Hub 系统 Windows 10 team PPIPro 系统 lindexi 2019-03 ...

  7. 有趣的HTML5 Web SQL 数据库

    Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs. 核心方法 以下是规范中定义的三个核心方法: openD ...

  8. Mac下升级node到最新版本

    建议先装n,再用n把node升级到最新稳定版: $ npm install -g n $ n stable

  9. ATM系统和购物车系统 不需要文件支撑

    目录 ATM系统 购物车系统 ATM系统 #coding=utf8 #Version:python 3.6.4 #Tools:Python 2019.9.7 _data_ = '2019/9/7/01 ...

  10. JDK8 Stream 数据流效率分析

    JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...