Poj2828 Buy Tickets 线段树、单点更新

蓝桥杯全排列扩展(找零钱问题-java详解) 题目: 有n个人正在饭堂排队买海北鸡饭。每份海北鸡饭要25元。奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25、50、100元),而且饭堂阿姨一开始没有任何零钱。请问饭堂阿姨能否给所有人找零(假设饭堂阿姨足够聪明)输入格式第一行一个整数n,表示排队的人数。 接下来n个整数a[1],a[2],…,a[n]。a[i]表示第i位学生手里钞票的价值(i越小,在队伍里越靠前)   输出格式:   输出YES或者NO   样例输入   4   25 25 50   样例输出:   YES 整体思路 很显然,这道题 阅读详情

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 had to travel by train to Mianyang, Sichuan Province for the winter camp selection of the national team of Olympiad in Informatics.

It was one o’clock a.m. and dark outside. Chill wind from the northwest did not scare off the people in the queue. The cold night gave the Little Cat a shiver. Why not find a problem to think about? That was none the less better than freezing to death!

People kept jumping the queue. Since it was too dark around, such moves would not be discovered even by the people adjacent to the queue-jumpers. “If every person in the queue is assigned an integral value and all the information about those who have jumped the queue and where they stand after queue-jumping is given, can I find out the final order of people in the queue?” Thought the Little Cat.

Input

There will be several test cases in the input. Each test case consists of N + 1 lines where N (1 ≤ N ≤ 200,000) is given in the first line of the test case. The next N lines contain the pairs of values Posi and Valiin the increasing order of i (1 ≤ i ≤ N). For each i, the ranges and meanings of Posi and Vali are as follows:

  • Posi ∈ [0, i − 1] — The i-th person came to the queue and stood right behind the Posi-th person in the queue. The booking office was considered the 0th person and the person at the front of the queue was considered the first person in the queue.
  • Vali ∈ [0, 32767] — The i-th person was assigned the value Vali.

There no blank lines between test cases. Proceed to the end of input.

Output

For each test cases, output a single line of space-separated integers which are the values of people in the order they stand in the queue.

Sample Input

4
0 77
1 51
1 33
2 69
4
0 20523
1 19243
1 3890
0 31492

Sample Output

77 33 69 51
31492 20523 3890 19243

Hint

The figure below shows how the Little Cat found out the final order of people in the queue described in the first test case of the sample input.



如果从头到尾的顺序去排队,那么必然会超时,所以考虑倒着插入,我们可以发现,这样的话位置是确定的。

用线段树去维护第 i 个节点前空位的数目,然后一个个插入即可。

#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
int index;
int x[200005],y[200005],ans[200005];
struct node{
    int l,r;
    int sum;
    int mid(){
        return (l+r)/2;
    }
}tree[800005];
void buildtree(int root,int l,int r)
{
    if(l==r){
        tree[root].l=tree[root].r=l;
        tree[root].sum=1;
        return;
    }
    tree[root].l=l;
    tree[root].r=r;
    buildtree(2*root,l,tree[root].mid());
    buildtree(2*root+1,tree[root].mid()+1,r);
    tree[root].sum=tree[2*root].sum+tree[2*root+1].sum;
}
void nodeinsert(int root,int i)
{
    if(tree[root].l==tree[root].r){
        tree[root].sum=0;
        index=tree[root].l;
        return;
    }
    tree[root].sum--;
    if(i<tree[2*root].sum){
        nodeinsert(2*root,i);
    }else{
        i-=tree[2*root].sum;
        nodeinsert(2*root+1,i);
    }
}

int main()
{
    int n;
    while(~scanf("%d",&n)){
        buildtree(1,1,n);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&x[i],&y[i]);
        }
        for(int i=n;i>0;i--){
            nodeinsert(1,x[i]);
            ans[index]=y[i];
        }
        printf("%d",ans[1]);
        for(int i=2;i<=n;i++){
            printf(" %d",ans[i]);
        }
        printf("\n");
    }
    return 0;
}


告别Modern Standby!Win10/11强制S3睡眠的终极指南(含BIOS设置避坑) 本文是针对Windows 10/11用户因Modern Standby(S0低电量待机)导致睡眠耗电、发热问题的终极解决方案。文章详细对比了Modern Standby与传统S3睡眠(Suspend to RAM)的本质区别,并提供了从系统诊断、注册表修改、BIOS/UEFI设置避坑到驱动优化的完整步骤,旨在帮助用户强制启用稳定、省电的S3睡眠模式,彻底告别睡眠噩梦。 阅读详情

相关推荐

matlab内读取文件目录时斜杠和反斜杠的使用

@matlab内读取文件目录时斜杠和反斜杠的使用TOC matlab内读取文件目录时,斜杠和反斜杠的使用 最近被斜杠和反斜杠弄晕了,于是总结了一下,在此和大家分享一下。 代码 clear; clc; close all; I1= imread('..\zs1.jpg'); %和代码文件夹同目录的图片 (纯反斜杠) I2= imread('../zs2/zs2.j...

weixin_44456694的博客 6572

Buy Tickets (线段树)

题目: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 had to travel by

qq_61037155的博客 282

S7-1200g2运动控制实战:从轴组配置到程序调试

本文详细介绍了S7-1200g2运动控制功能的实战应用,从轴组配置到程序调试的全流程。通过TIA Portal中的工艺对象配置,实现单轴、同步轴组等运动控制模型,并分享常见问题排查与性能优化经验,帮助工程师快速掌握中小型自动化设备的运动控制技术。

weixin_28698059的博客 588

poj2828(线段树查找序列第k小的值)

题目链接:https://vjudge.net/problem/POJ-2828 题意:有n个人,依次给出这n个人进入队列时前面有多少人p[i],和它的权值v[i],求最终队列的权值序列。 思路:基本类似于poj2182,简化题意后即为求序列1..n中第k小的值的问题。读入数据量比较大,最好读入优化。我们从n..1逆序遍历,则可以确认最后一个人的最终位置为p[n]+1,然后从序列中删除p[n]...

weixin_34061042的博客 373

手把手教你用分立元件搭建自举电路:解决高端MOS驱动难题

本文详细介绍了如何用分立元件搭建自举电路,解决高端MOS驱动中的栅源极电压不足问题。通过面包板实验,逐步讲解二极管、电容等关键元件的选型与电路搭建,提供波形调试和常见问题排查方法,帮助工程师提升开关电源和电机驱动等应用的效率与可靠性。

weixin_30555125的博客 152

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 378

poj 2828

网上好多人都用的是线段树,其实树状数组也是可以的。不过也侧面说明了线段树的可扩展性是强于树状数组的。 题意: 插队的问题,每个案例给出n,代表有n个插队的,每个给出p,v,意思是代号为v的人插在了第p个人的后面,问最后的队伍的排列? 题目中一开始整个队列是空的,也就是说如果输入i,j:代表代号为j的人插在了第i个人的后面,也就是说在他之前一定有了i个人,而他的位置是i+1。 Sample Input 4 0 77 1 51 1 33 2 69 4 0 20523 1 19243 1 3890 0 31492

Fawkess的博客 227

从工业夹爪到Shadow Hand:一文看懂机器人灵巧手的硬件进化史(附避坑指南)

本文详细解析了机器人灵巧手从工业夹爪到Shadow Hand的硬件进化历程,涵盖刚性夹持器、自适应夹持器到多指灵巧手的技术突破。文章还提供了选购指南与技术避坑策略,帮助读者根据操作复杂度和环境结构化程度选择最适合的解决方案,适用于制造业、医疗和服务业等多个领域。

weixin_29074409的博客 484

poj 2828 Buy Tickets 线段树

&#13; 题意/Description:&#13;     Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue…&#13;     The Lunar New Year was appro...

peter_zhu01的博客 201

DDR March系列算法整理

一

不吃鱼的猫的博客 1万+

COMSOL网格划分技巧总结

在对马赫曾德尔型光学传感器进行模拟仿真时,在采用自动物理场自动控制网格-极细化的情况下透射谱曲线仍不理想,因此需要手动划分网格来对其进行更精细的剖分。 手动划分的基本原则是在作用边界,热点,曲边处做细致划分, 基底,包层等做粗略划分。对于光波导型的微纳结构,在仿真时一般需要用到创建边界层网格。 1.COMSOL所需要的网格数量 网格单元数越多,结果精细度越高,计算所需内存越多。在细化到一定程度后网格收敛,仿真结果提升不明显。 2.网格剖分类型 ...

qq_42453337的博客 4万+

POJ-2828 Buy Tickets【线段树 单点更新】

POJ-2828 Buy Tickets【线段树 单点更新】

SaySomething 434

【Unity 实用工具篇】✨| 受击插件Feel 详细教程,开发游戏时更好的操控 游戏打击感

在一个游戏中,游戏手感对于游戏的整体游玩体验是非常重要的,而游戏手感中有一个很重要的点:打击感 那本篇文章就来讲一下打击感中的受击反馈部分。 在游戏中经常会用到攻击敌人,敌人扣血,执行某些受击功能的执行,尤其是对于有战斗场景的游戏来说,这就是标准的受击反馈。 所以引出本篇文章的主角:受击插件 Feel 的使用,2D和3D游戏都可以使用。

努力前行,总会成为自己心中的那道光 3万+

POJ 2828 Buy Tickets 线段树单点更新

传送门:POJ2828 题意:n个人买票,每个人入队的时候有可能站在队尾也有可能插队,给出每个人入队时前面有几个人,问最终的序列是什么样的。 思路:因为最后入队的人位置最先确定(给定的前边有多少人就留多少空位),所以可以考虑逆向遍历,然后用线段树维护每个区间内还剩多少空位。 代码: #include #include #include #include #include #include

WA是一笔财富 403

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

POJ2828 Buy Tickets 线段树单点更新

题目链接:点击打开链接 题目大意:有n个人,第i行表示的是第i个人(其编号为val[ i ])插到第pos[ i ]个人的后面,问你n次插队之后的最终结果,按排队顺序输出每个人的编号。 分析:我们先把第一个人插入队中,然后顺序再插入一个人的时候,我们就需要更新其插入位置之后的所有位置,这样最坏的情况下就是O(n!)的复杂度了。但是如果换一种思维,我们注意到,最后一个人插

AC_Gibson的专栏 693

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

http://poj.org/problem?id=2828

fcbruce 752

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

poj2828 Buy Tickets 单点更新线段树

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 14377   Accepted: 7183 Description Railway tickets were difficult to buy around the Lunar New Y

459

线段树单点更新 poj2828 buy tickets

点击打开链接 Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 20199   Accepted: 9980 Description Railway tickets were difficult to buy around the

mayuqing98的博客 328

poj2828 Buy Tickets 线段树,单点更新

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

basement_boy 786

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

POJ - 2828 Buy Tickets 题目 假设有 n 个人要排队,刚开始没有人,现在每次给你 n 个人的两个属性 p,v,代表这个人插在了第 p 个人的后面,这个人的权值是v。最后输出排队序列。 分析 题目意思很好懂,但是很容易超时,刚开始我看到有很多插入操作,想用单链表模拟,但是找到插到第几个人前面也只能遍历,复杂度依然是 n2n^2n2。 换一种思路,既然前面给你的人的位置都有可能被...

Stormjing的博客 273

poj 2828 Buy Tickets 线段树单点更新

题意:有N个人排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos。要求把队伍最后的状态输出 //#include #include #include #include #include #include #include #include #include #include #include ///cout << fixed << setpr

uuuuuu 419

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

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 had to travel by tra

HJY 342

POJ 2828 Buy Tickets (线段树 单点更新 插队问题)

没想到用线段树是我遇到的第一个问题,第二个便是建树。一般情况下,都是1-n建树,而这个题,最好是0-n-1建树,很方便。其实刚开始没有大胆尝试是因为没有意识到线段树的每个节点的l、r和rt是没有什么必然关系的,l、r控制着左右端点,而rt只不过是一个下标罢了,仅仅是表示保存在了数组哪个位置。其相对独立。还有便是线段树节点的含义,每个子叶表示一个位置,其父节点存储了可用的位置数,每加入一个成员,便占用一个位置,而节点的编号便是这个成员的最终位置。对于建树的最后一个问题,怎么把每个人加入到树中?因为对于这个题,

顺便A道题 1227

poj2828-Buy Tickets(线段树,单点更新)

题目来源:http://poj.org/problem?id=2828题意一群人在排队,,,天依旧黑着,,所以每个人都想插队,。,(反正天黑也瞅不见,。机智boy)。。完了之后输出最后的队列就好。,,。。思路越往后的插队得位置越接近最终的状态,那么按照样例: 1 77 2 51 2 33 3 69 前面的位置都加上了1,代表他前面有几个空位置,那么先插入倒数第一个。。插入完成后是这:(空格

Crazy 308

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

思考这样的一个问题,将数据离线操作之后,最后一个人的位置是确定的,因为后面没有数据改变他的位置了,然后对于倒数第二个数据我们找到他的位置是不是在空余的位置中数出第几个空位然后将其填入,所以就可以用线段树来维护单点了。 #include &lt;iostream&gt; using namespace std; const int MAXN=222222; int stree[MAXN&lt;...

leekerian的博客 177

poj2828 Buy Tickets(线段树,单点更新)

题目链接:点这里!!!! 题意:有N个人排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍前面有pos个人。要求把队伍最后的状态输出。(N 题解: 1、这道题我们按插入的顺序从后往前做就行,我们初始区间所有数都为1。 2、我们假设当前的位置为pos,是不是代表在当前插入以前有pos个数在其前面,我们相当于从后往前插入时,求前缀和为pos+1的位置在哪里

Zsss的博客 317
上一篇: Hdu1166 敌兵布阵 线段树、单点更新
下一篇: Hdu1754 I Hate It 线段树、单点更新+区间最值
Megumin
博客等级 码龄10年 3粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值