洛谷P3850 书架
题目描述
Knuth先生家里有个精致的书架,书架上有N本书,如今他想学到更多的知识,于是又买来了M本不同的新书。现在他要把新买的书依次插入到书架中,他已经把每本书要插入的位置标记好了,并且相应的将它们放好。由于Knuth年龄已大,过几天他已经记不清某些位置上放的到底是什么书了,请问你能帮助他吗?
输入输出格式
输入格式:
输入文件的第一行为整数N,接下来N行分别是书架上依次放着的N本书的书名(书名由不含空格的字符串构成,长度不超过10)。下一行将要输入一个整数M,接下来的M行分别为这本书的书名和要插入的位置。下一行将要输入一个整数Q,接下来共有Q次询问,每行都是一个整数表示询问的位置。(书架上位置的编号从0开始)
输出格式:
输出Q行,每行对应着相应查询位置的书名。
输入输出样例
3
Math
Algorithm
Program
2
Picture 2
System 1
3
0
1
3
Math
System
Picture
说明
原来有三本书Math、Algorithm、System,后来又买了两本书,分别插入到2和1的位置,每次插入时其他书都要向后挪一个位置,最后书架上书的序列为:
0 Math
1 System
2 Algorithm
3 Picture
4 Program
Q次询问依次为0, 1, 3位置的书,所以答案为:Math、System、Picture
对于30%的数据,1 ≤ N ≤ 100, 1 ≤ M ≤ 10^3, 1 ≤ Q ≤ 10^3
对于100%的数据,1 ≤ N ≤ 200, 1 ≤ M ≤ 10^5, 1 ≤ Q ≤ 10^4
对于100%的数据都符合题目中所描述的限制关系,数据保证每次插入的位置均不超过当时书架上书的数量,而且保证Q次查询中的每个位置上一定有书。
__________________________________________________________________________________
FHQ_TREAP
__________________________________________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e5+300;
4 char s[maxn][12];
5 int n,m,q;
6 struct node
7 {
8 int ch[2],siz,rd,val;
9 }tr[maxn];
10 int tot,root;
11 int newnode(int x)
12 {
13 tot++;
14 tr[tot].siz=1;
15 tr[tot].rd=rand();
16 tr[tot].val=x;
17 tr[tot].ch[1]=tr[tot].ch[0]=0;
18 return tot;
19 }
20 void update(int cur)
21 {
22 tr[cur].siz=tr[tr[cur].ch[0]].siz+tr[tr[cur].ch[1]].siz+1;
23 }
24 int merge(int x,int y)
25 {
26 if(x*y==0)return x+y;
27 if(tr[x].rd<tr[y].rd)
28 {
29 tr[x].ch[1]=merge(tr[x].ch[1],y);
30 update(x);
31 return x;
32 }
33 else
34 {
35 tr[y].ch[0]=merge(x,tr[y].ch[0]);
36 update(y);
37 return y;
38 }
39 }
40 void split(int cur,int k,int &x,int &y)
41 {
42 if(!cur)x=y=0;
43 else
44 {
45 if(k>tr[tr[cur].ch[0]].siz)
46 {
47 x=cur;
48 split(tr[cur].ch[1],k-tr[tr[cur].ch[0]].siz-1,tr[cur].ch[1],y);
49 }
50 else
51 {
52 y=cur;
53 split(tr[cur].ch[0],k,x,tr[cur].ch[0]);
54 }
55 update(cur);
56 }
57 }
58 int kth(int now,int k)
59 {
60 int cur=now;
61 while(cur)
62 {
63 if(tr[tr[cur].ch[0]].siz+1==k)return tr[cur].val;
64 else if(tr[tr[cur].ch[0]].siz>=k)cur=tr[cur].ch[0];
65 else
66 {
67 k-=tr[tr[cur].ch[0]].siz+1;
68 cur=tr[cur].ch[1];
69 }
70 }
71 }
72 void insert(int v,int p)
73 {
74 int x,y;
75 split(root,p-1,x,y);
76 root=merge(merge(x,newnode(v)),y);
77 }
78 void print(int p)
79 {
80 printf("%s\n",s[kth(root,p)]);
81 }
82 int main()
83 {
84 srand((unsigned)time(0));
85 scanf("%d",&n);
86 for(int i=1;i<=n;++i)
87 {
88 scanf("%s",s[i]);
89 root=merge(root,newnode(i));
90 }
91 scanf("%d",&m);
92 int p;
93 for(int i=n+1;i<=n+m;++i)
94 {
95 scanf("%s%d",s[i],&p);
96 insert(i,p+1);
97 }
98 scanf("%d",&q);
99 for(int i=0;i<q;++i)
100 {
101 scanf("%d",&p);
102 print(p+1);
103 }
104 return 0;
105 }
洛谷P3850 书架的更多相关文章
- 洛谷P1848 书架
好,我一直以为书架是splay,然后发现还有个优化DP的书架.妃的书架 蓝书和PPT上面都讲了,应该比较经典吧. 题意: 有n个物品,每个都有宽,高. 把它们分成若干段,使得每段的最大值的总和最小.且 ...
- 洛谷P2468 SDOI 2010 粟粟的书架
题意:给你一个矩形书架,每个点是这本书的页数,每次询问(x1,y1)(x2,y2)这个小矩形里最少需要取几本书使得页数和等于Hi. 题解:小数据二位前缀和预处理+二分答案,大数据一行所以用主席树做,感 ...
- [洛谷P2596] [ZJOI2006]书架
洛谷题目链接:书架 题目描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后 ...
- 洛谷P2468 [SDOI2010]粟粟的书架
来了来了,随便拽一道题写题解[大雾] 最近发现自己基础奇差于是开始复习之前学过的东西,正好主席树我几乎完全没学会,然后打开洛谷试炼场… 发现了这么一道二合一的题. 这道题其实分成两个部分,前50%是一 ...
- 洛谷P2464 [SDOJ2008]郁闷的小J
洛谷P2464 [SDOJ2008]郁闷的小J 题目描述 小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他 ...
- 洛谷 P1103 书本整理(动规)
洛谷 P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
随机推荐
- 深入理解CSS盒模型【转载】
下面本文章将会从以下几个方面谈谈盒模型. 基本概念:标准模型 和IE模型 CSS如何设置这两种模型 JS如何设置获取盒模型对应的宽和高 实例题(根据盒模型解释边距重叠) BFC(边距重叠解决方案) 基 ...
- Hadoop3.2.0+Centos7三节点完全分布式安装配置
一.环境准备 ①准备三台虚拟机,配置静态IP ②先修改主机名(每个节点统一命名规范) vim /etc/hostname master #重启生效 配置DNS每个节点 vim /etc/hosts 1 ...
- maven打包 依赖jar与不依赖jar
?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="http://maven.a ...
- “500 oops socket” Debian 9 running via Linux Deploy上成功部署vsftpd的解决方案(201901原创)【成功完美简单极致】
"500 oops socket" Debian 9 running via Linux Deploy上成功部署vsftpd的解决方案(201901原创)[成功完美简单极致] #自 ...
- 【Java基础】Java8 新特性
Java8 新特性 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).使用它可以写出更简洁.更灵活的代码. L ...
- LeetCode200 岛屿的个数
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: ...
- Java通过基姆拉尔森公式判断当前日期是不是工作日
基姆拉尔森公式 算法如下: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 在公式中d表示日期中的日数,m表示月份数,y表示年数. 注意:在公 ...
- Python列表推导式玩法
前言 列表做为python的基础,是必须学习的语法之一.一些基础的之前已经是反复温习和使用了,今天我们来学习它的进阶版-->列表推导式. 列表推导式: 优点:是将所有的值一次性加载到内存中,相比 ...
- VmwareTools显示灰色无法安装
VMware不安装VMware Tools无法全屏,然后实机之间不能传输文件等. 安装Vmware Tools显示是灰色的,详细解决方案如下 打开虚拟机设置,CD/DVD 选择ISO映像文件 在Vmw ...
- JAR冲突问题的解决以及运行状态下如何查看加载的类
今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: java ...