题目描述

Knuth先生家里有个精致的书架,书架上有N本书,如今他想学到更多的知识,于是又买来了M本不同的新书。现在他要把新买的书依次插入到书架中,他已经把每本书要插入的位置标记好了,并且相应的将它们放好。由于Knuth年龄已大,过几天他已经记不清某些位置上放的到底是什么书了,请问你能帮助他吗?

输入输出格式

输入格式:

输入文件的第一行为整数N,接下来N行分别是书架上依次放着的N本书的书名(书名由不含空格的字符串构成,长度不超过10)。下一行将要输入一个整数M,接下来的M行分别为这本书的书名和要插入的位置。下一行将要输入一个整数Q,接下来共有Q次询问,每行都是一个整数表示询问的位置。(书架上位置的编号从0开始)

输出格式:

输出Q行,每行对应着相应查询位置的书名。

输入输出样例

输入样例#1:

  1. 3
  2. Math
  3. Algorithm
  4. Program
  5. 2
  6. Picture 2
  7. System 1
  8. 3
  9. 0
  10. 1
  11. 3
输出样例#1:

  1. Math
  2. System
  3. 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 ≤ 103, 1 ≤ Q ≤ 103

对于100%的数据,1 ≤ N ≤ 200, 1 ≤ M ≤ 105, 1≤Q≤104

对于100%的数据都符合题目中所描述的限制关系,数据保证每次插入的位置均不超过当时书架上书的数量,而且保证Q次查询中的每个位置上一定有书。

Solution:

  水题,就一SB平衡树。

  用平衡树维护中序,直接模拟插入的过程,再查询第k位置输出就好了。

代码:

  1. /*Code by 520 -- 10.3*/
  2. #include<bits/stdc++.h>
  3. #define il inline
  4. #define RE register
  5. #define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
  6. using namespace std;
  7. const int N=;
  8. int n,m,ch[N][],root,cnt,siz[N],date[N],rnd[N];
  9. string s[N];
  10. il int newnode(int v){siz[++cnt]=,date[cnt]=v,rnd[cnt]=rand();return cnt;}
  11. il void up(int x){siz[x]=siz[ch[x][]]+siz[ch[x][]]+;}
  12. int merge(int x,int y){
  13. if(!x||!y) return x+y;
  14. if(rnd[x]<rnd[y]) {ch[x][]=merge(ch[x][],y),up(x);return x;}
  15. else {ch[y][]=merge(x,ch[y][]),up(y);return y;}
  16. }
  17. void split(int rt,int v,int &x,int &y){
  18. if(!rt) {x=y=;return;}
  19. if(siz[ch[rt][]]<v) x=rt,split(ch[rt][],v-siz[ch[rt][]]-,ch[x][],y),up(x);
  20. else y=rt,split(ch[rt][],v,x,ch[y][]),up(y);
  21. }
  22. il int kth(int rt,int v){
  23. while(){
  24. if(siz[ch[rt][]]>=v) rt=ch[rt][];
  25. else if(siz[ch[rt][]]+<v) v-=siz[ch[rt][]]+,rt=ch[rt][];
  26. else return date[rt];
  27. }
  28. }
  29. int main(){
  30. ios::sync_with_stdio();
  31. cin>>n; int v,x,y;
  32. For(i,,n) cin>>s[i],root=merge(root,newnode(i));
  33. cin>>m;
  34. For(i,n+,n+m) cin>>s[i]>>v,split(root,v,x,y),root=merge(merge(x,newnode(i)),y);
  35. cin>>m;
  36. For(i,,m) cin>>v,split(root,v,x,y),cout<<s[kth(y,)]<<endl,root=merge(x,y);
  37. return ;
  38. }

P3850 [TJOI2007]书架的更多相关文章

  1. [TJOI2007]书架 题解

    文中给了你一些句子,以及让你任意插入某个位置以及查询某个位置的句子. 发现因为是句子很难搞,所以开个 map 离散一下成数字.然后在额外开一个 map 记录这个数字对应的句子. 然后你要写一种支持插入 ...

  2. Luogu3850 [TJOI2007]书架 (平衡树)

    将要插入位置前和前前splay,再连在右子树上. #include <iostream> #include <cstdio> #include <cstring> ...

  3. 洛谷P3850 书架

    题目描述 Knuth先生家里有个精致的书架,书架上有N本书,如今他想学到更多的知识,于是又买来了M本不同的新书.现在他要把新买的书依次插入到书架中,他已经把每本书要插入的位置标记好了,并且相应的将它们 ...

  4. [BZOJ1861][Zjoi2006]Book 书架

    [BZOJ1861][Zjoi2006]Book 书架 试题描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候 ...

  5. Android分享一款漂亮的折叠书架菜单

    一个Android折叠书架菜单,效果极佳,给人的视觉感觉很好,便于使用. FoldingMenu

  6. [转载]我的Java后端书架 (2016年暖冬4.0版)

      [转载]我的Java后端书架 (2016年暖冬4.0版) ps:最近正在初学Java,有一些其他语言的底子,但是还是要好好看书,好好练习,网上找了好久,都没有这份书单来的实用,特意转载过来,方便以 ...

  7. BZOJ 1861: [Zjoi2006]Book 书架

    1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1290  Solved: 740[Submit][Stat ...

  8. 基于HT的CSG功能构建HTML5的3D书架

    构造实体几何CSG全称Constructive solid geometry,是3D计算机图形学中构建模型的常用技术,可通过合并Union.相减Subtraction和相交Intersction的三种 ...

  9. 【代码笔记】iOS-点击加号增加书架,点击减号减少书架

    一,效果图. 二,工程图. 三,代码. ReaderViewController.h #import <UIKit/UIKit.h> @interface ReaderViewContro ...

随机推荐

  1. VM虚拟机安装CentOS 7.0添加jdk环境

    虚拟机注册码 5A02H-AU243-TZJ49-GTC7K-3C61N 安装centos系统,网络类型选择桥接网络安装完成后vi /etc/sysconfig/network-scripts/ifc ...

  2. Netty源码分析第5章(ByteBuf)---->第6节: 命中缓存的分配

    Netty源码分析第6章: ByteBuf 第六节: 命中缓存的分配 上一小节简单分析了directArena内存分配大概流程, 知道其先命中缓存, 如果命中不到, 则区分配一款连续内存, 这一小节带 ...

  3. MUI的踩坑笔记

    最近在做公司项目的手机端实现,稍微记录下遇到的坑 1.在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,mui将该事件封装成了mui.plusReady( ...

  4. DNS分离解析IPV6与IPV4用户

    IPV6改造中经常会遇到,网站使用了CDN,但是CDN厂商还不支持IPV6的情况,而AAAA.A.CNAME记录互相冲突,想实现IPV6用户得到AAAA记录,IPV4用户得到CNAME记录的需求. 解 ...

  5. 记一次centos6升级salt-minion启动失败的问题

    记一次centos6升级salt-minion启动失败的问题 作者:耀耀 blog:https://www.liuyao.me 一.起因 升级Salt-minion后 使用/etc/init.d/sa ...

  6. python之模块_随手记录的模块

    目录 1.StringIO模块 2.string模块 3.pprint模块 4.struct模块 5.uuid模块 6.itertools 7.prettytable 1.StringIO (1)使用 ...

  7. Django_rest_framework_Serializer

    序列化Serializer 序列化用于对用户请求数据进行验证和数据进行序列化(为了解决queryset序列化问题). 那什么是序列化呢?序列化就是把对象转换成字符串,反序列化就是把字符串转换成对象 m ...

  8. Django_rest_framework_组件(authentication、permission、throttle)

    认证组件 说明 from rest_framework.authentication import BaseAuthentication class TestAuthentication(BaseAu ...

  9. css修改input自动提示的黄色背景

    css修改input自动提示的黄色背景 input:-webkit-autofill { background-color: #FAFFBD; background-image: none; -web ...

  10. oracle查看用户表

    select table_name from user_tables;