pojBuy Tickets2828线段树或者树状数组(队列中倒序插队)

 
这题开始的思路就是模拟:就像数组中插点一样,每一个想买票的人都想往前插队!
但是这样的话肯定TLE, 看了别人的思路之后才恍然大悟!
正解:将开始的正序插入,变成倒序插入,这样的话,想一想:第 i 个人想要插在 p[i]的位置上,那么就要保证所插入的位置之前一定要有 p[i]-1个空位!因为一定会有p[j]<p[i](0<=p[j]<=j,每个人都想往前插队) 的第j个人插在p[i]的位置的前边! 如果i<j; && p[i]==p[j], 倒序插入中,第j个人先插入, 那么第i个人在保证插入的位置之前有p[i]-1个空位的同时,又要插入到第 j 个人的后边! 
 

 



1
#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #define M 200005 6 using namespace std; 7 8 pair<int, int>per[M]; 9 int ret[M]; 10 int tree[M*4]; 11 int n; 12 13 void buildT(int p, int ld, int rd){ 14 if(ld==rd){ 15 tree[p]=1; 16 return ; 17 } 18 int mid=(ld+rd)>>1; 19 buildT(p<<1, ld, mid); 20 buildT(p<<1|1, mid+1, rd); 21 tree[p]=tree[p<<1]+tree[p<<1|1]; 22 } 23 24 void updateT(int p, int ld, int rd, int pos, int val){ 25 if(ld==rd){ 26 tree[p]=0; 27 ret[ld]=val; 28 return ; 29 } 30 int mid=(ld+rd)>>1; 31 if(tree[p<<1]>pos) 32 updateT(p<<1, ld, mid, pos, val); 33 else 34 updateT(p<<1|1, mid+1, rd, pos-tree[p<<1], val); 35 36 tree[p]=tree[p<<1]+tree[p<<1|1]; 37 } 38 39 int main(){ 40 int i; 41 while(scanf("%d", &n)!=EOF){ 42 buildT(1, 1, n); 43 for(i=1; i<=n; ++i) 44 scanf("%d%d", &per[i].first, &per[i].second); 45 for(i=n; i>=1; --i) 46 updateT(1, 1, n, per[i].first, per[i].second); 47 48 printf("%d", ret[1]); 49 for(i=2; i<=n; ++i) 50 printf(" %d", ret[i]); 51 printf("\n"); 52 } 53 return 0; 54 }

 

 1 //树状数组~~不解释
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<algorithm>
 6 
 7 #define N 200005
 8 using namespace std;
 9 
10 int tree[N];
11 int pos[N], val[N];
12 int ret[N];
13 int n;
14 
15 int lowbit(int x){
16     return x&(-x);
17 }
18 
19 void buildT(){
20     for(int i=1; i<=n; ++i){
21         tree[i]=0;
22         for(int j=i-lowbit(i)+1; j<=i; ++j)
23             tree[i]+=1;
24     }
25 }
26 
27 void updateT(int x){
28     while(x<=n){
29         tree[x]-=1;
30         x+=lowbit(x);
31     }
32 }
33 
34 int getSum(int x){
35     int s=0;
36     while(x>0){
37         s+=tree[x];
38         x-=lowbit(x);    
39     }
40     return s;
41 }
42 
43 int main(){
44     while(scanf("%d", &n)!=EOF){
45         buildT(); 
46         for(int i=1; i<=n; ++i){
47             scanf("%d%d", &pos[i], &val[i]);
48             ret[i]=-1;
49         }
50         for(int i=n; i>=1; --i){
51             int ld=1, rd=n;
52             bool flag=false;
53             while(ld<=rd){
54                 int mid=(ld+rd)>>1;
55                 int s=getSum(mid);
56                 //如果当前的位置没有人插入并且该位置的之前的人数恰好为pos[i] 
57                 if(ret[mid]==-1 && s==pos[i]+1){ 
58                     updateT(mid);
59                     ret[mid]=val[i];
60                     flag=true;//已经找到不用在继续寻找了 
61                     break;
62                 }
63                 else if(s>=pos[i]+1)
64                     rd=mid-1;
65                 else ld=mid+1;
66             }
67             if(!flag) ret[rd+1]=val[i];//直到找到当前的位置没有人插入并且该位置的之前的人数恰好为pos[i]  
68         }
69         printf("%d", ret[1]);
70         for(int i=2; i<=n; ++i)
71              printf(" %d", ret[i]);
72         printf("\n"); 
73     } 
74     return 0; 
75 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/3885134.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

减去字符串_从文本字符串中提取指定值的6个超级技巧解读

在实际的工作中&#xff0c;从指定的字符串中提取指定文本也是常用的技巧之一&#xff0c;除了手动操作之外&#xff0c;下文的8种应用技巧也是必须要掌握的。一、Left函数法。功能&#xff1a;从指定文本字符串的第一个字符开始&#xff0c;提取指定长度的字符串。语法结构&am…

如果用计算机录制歌曲需要,网络歌手怎么用电脑录音软件录歌

现在网上有很多网络歌手主要分为两类&#xff0c;一类是原创&#xff0c;一类是翻唱。可是不管是原创还是翻唱都需要自己唱歌录歌&#xff0c;要有属于自己的歌曲(自己唱的)。要录歌就要有设备&#xff0c;毕竟网路歌手刚开始大多数都是草根没有钱找音乐工作室&#xff0c;只能…

中国剩余定理证明过程

原网址&#xff1a;http://blog.csdn.net/wtq493841534/article/details/5452720 中国剩余定理 中国剩余定理可以描述为&#xff1a; 若某数x分别被d1、、…、dn除得的余数为r1、r2、…、rn&#xff0c;则可表示为下式&#xff1a;xR1r1R2r2…RnrnRD其中R1是d2、d3、…、dn的公…

关闭浏览器前提示_win7系统ie总弹出查看和跟踪下载的关闭方法

今天小编给大家分享的是win7系统ie总弹出查看和跟踪下载的关闭方法&#xff0c;使用ie浏览器上网的时候&#xff0c;有些用户会遇到ie总弹出查看和跟踪下载的窗口&#xff0c;很多用户想关闭掉此提示&#xff0c;却不知如何关闭查看和跟踪下载的窗口&#xff0c;那么请参照以下…

html引入百度地图报错,vue引入百度地图BMapGL,或者其他个性化地图

3.jpgvue的百度地图早就有vue-baidu-map这里就不赘述了&#xff0c;自己去直接对着API写就好了&#xff0c;基本上已经满足绝大多数需求了还简单方便。vue-baidu-map 传送门 https://dafrok.github.io/vue-baidu-map/#/zh/index这里主要是在vue里面引入BMapGL&#xff0c;或者其…

Sort the Array

1 /*2 思路&#xff1a; 3 找到单调下降串的起始位置[l, r]4 如果左边 0...l-1中的最大值 > l...r中的最小值 或者5 r1...n中的最小值 < l...r中的最大值 都是不能实现排序的&#xff01; 6 */7 #include<iostream>8 #include<cstdio>9 #include…

排序千万级数据_从千万级房产成交量排名,窥探中国城市的真实家底

原标题&#xff1a;从千万级房产成交量排名&#xff0c;窥探中国城市的真实家底 文&#xff0f;孙不熟 来源/城市战争 如果你有1000万以上的买房预算&#xff0c;你的选择其实很少&#xff0c;总共不超过10个城市&#xff0c;这就是中国城市和楼市的真实家底。 昨天推送了一篇《…

html 实现列表组并排,列表组--自定义列表组

Bootstrap框加在链接列表组的基础上新增了两个样式&#xff1a;☑list-group-item-heading&#xff1a;用来定义列表项头部样式☑list-group-item-text&#xff1a;用来定义列表项主要内容这两个样式最大的作用就是用来帮助开发者可以自定义列表项里的内容&#xff0c;如下面的…

poj1006生理周期(中国剩余定理)

1 /*2 中国剩余定理可以描述为&#xff1a;3 若某数x分别被d1、、…、dn除得的余数为r1、r2、…、rn&#xff0c;则可表示为下式&#xff1a;4 xR1r1R2r2…RnrnRD5 其中R1是d2、d3、…、dn的公倍数&#xff0c;而且被d1除&#xff0c;余数为1&#xff1b;&#xff08;称为R1相对…

queryselectorall 怎么取name_用这个方法,我爬取了《王者荣耀》《英雄联盟》等游戏皮肤图片...

本文简介&#xff1a;本文使用Python制作爬虫&#xff0c;来爬取《英雄联盟》《王者荣耀》《神之浩劫》等游戏官方网站的英雄皮肤图片。可以作为新手爬虫的练手实战案例&#xff01;&#xff01;爱打游戏的各位肯定也是对游戏里面制作精美&#xff0c;妩媚无比或是帅气逼人的皮…

云端计算机可以玩游戏么,手机掌上云电脑是什么?为什么可以玩PC游戏?

原标题&#xff1a;手机掌上云电脑是什么&#xff1f;为什么可以玩PC游戏&#xff1f;经常会在一些短视频平台上看到别人用云电脑的应用在手机上玩PC游戏&#xff0c;那么这个掌上云电脑的应用到底是什么呢&#xff1f;为什么可以玩PC游戏呢&#xff1f;按照以往的理解&#xf…

codeforces——Little Pony and Sort by Shift

1 /*2 题目大意&#xff1a;给你一个序列&#xff0c;不断地将最后边的数值移动到最前边&#xff0c;问最少经过多少次可以变成一个单调递增的序列&#xff01; 3 如果不能则输出-1。 4 如果该序列按照不断从后向前移动排序成功&#xff0c;那么该序列要么只有一个单调递增的…

用python玩转数据慕课答案第三周_大学慕课用Python玩转数据答案公众号

抹灰用石灰膏的熟化时间不少于多少天&#xff1f;16只兔子&#xff0c;分别装在5个笼子里&#xff0c;每个笼子里的小兔子只数都不相等&#xff0c;笼子里最不可能出现的只数是( )。患者&#xff0c;女&#xff0c;44岁。患心肌梗死住院治疗&#xff0c;首次静脉泵入硝酸甘油时…

计算机组策略怎么设置远程桌面,组策略 之   自动启用客户端远程桌面功能

在企业里进行管理的时候&#xff0c;有时需要利用远程桌面来管理客户端计算机&#xff0c;在一般情况下&#xff0c;往往需要客户端启用此功能&#xff0c;有没有好的办法&#xff0c;让客户端自动启用呢&#xff1f;当然可以&#xff0c;我们可以通过组策略的形式来完成。实施…

codeforces——Little Pony and Expected Maximum

1 /*2 我们枚举每次选择最大数值的情况&#xff1a;m个数&#xff0c; 投掷n次3 最大值是1&#xff1a; 1种4 2&#xff1a; 2^n-15 3: 3^n-2^n6 .....7 m: m^n-(m-1)^n8 9 所以最后的结果sum((k/m)^n …

华北水利水电大学c语言程序设计四_我校代表队在“中国高等计算机大赛——团体程序设计天梯赛” 中喜获佳绩...

近日&#xff0c;第四届“中国高校计算机大赛——团体程序设计天梯赛”全国总决赛获奖名单公布&#xff0c;我校以全国高校排名第84位&#xff0c;河南省高校第4名的成绩获得河南省高校二等奖。我校派出的“NCWU_面壁者”&#xff0c;“NCWU_弹星者”和“NCWU_执剑人”三支队伍…

计算机控制基础知识,最新 分析计算机控制系统及其运算基础知识-精品

分析计算机控制系统及其运算基础知识系统程序层的工作基础建立在控制系统改造和扩充过的机器&#xff0c;下文就是关于控制系统及其运算基础知识论文。随着技术的飞进发展&#xff0c;计算机控制系统及其操作过程的运算程序研究已成为一个热门话题&#xff0c;本文主要对计算机…

当我不再依赖你的时候说说_不要依赖任何人说说 不要指望别人的经典话

1、静下心慢慢变得沉稳&#xff0c;不再依赖任何人&#xff0c; 珍惜身边人 &#xff0c;不强求不勉强每天都要很开心。2、的确没什么人可以陪你一辈子&#xff0c;所以在那些难熬的日子过去之后&#xff0c;将会不再依赖任何人成长。3、自己一个人走在路上&#xff0c;才发现依…

Uvaoj 11624 - Fire!

1 /*************************************************************************2 > File Name: test.cpp3 > Author: HJZ4 > Mail: 2570230521qq.com 5 > Created Time: 2014年08月03日 星期日 07时26分58秒6 ********************************…

android 版本更新工具类_报表分析工具FastReport .Net 2021年超大版本更新,实现了对.NET 5的支持...

在FastReport .NET 2021.1的新版本中&#xff0c;我们实现了对.NET 5的支持。添加了新条形码-Deutsce Post Leitcode。将RTF转换为报告对象的算法已得到显着改进。并且还添加了用于转换数字的新功能。欢迎下载体验。&#xff08;点击下方按钮下载&#xff09;立即点击下载FastR…