[TJOI2007]书架
题目
网上搜
分析
我们可以认为插入一本书是在树中第 \(k\) 的位置进行插入操作
其中 \(k\) 为这本放入书架后的位置
考虑 \(fhq-treap\) 实现
我们将书编号为 \([0,n-1]\)
那么如果插入的书的位置为 \(k\),实际上是在树中位置为 \(k+1\)
将前 \(k\) 个分裂出来就可以插入,再合并还原即可
询问操作就是查第 \(k\) 位
\(Code\)
#include<cstdio>
#include<algorithm>
#include<ctime>
using namespace std;
const int N = 1e5 + 500;
int n, m, q, rt, tot;
char s[N][20];
struct node{
int ls, rs, siz, val, rnd;
}tr[N];
int read()
{
int res = 0; char ch = getchar();
while (ch < '0' || ch > '9') ch = getchar();
while (ch >= '0' && ch <= '9')
res=(res<<3)+(res<<1)+ch-'0', ch = getchar();
return res;
}
void pushup(int p){tr[p].siz = tr[tr[p].ls].siz + tr[tr[p].rs].siz + 1;}
int new_node(int v)
{
static int size = 0;
tr[++size] = node{0, 0, 1, v, rand()};
return size;
}
void split(int p, int k, int &x, int &y)
{
if (!p) x = y = 0;
else{
if (k <= tr[tr[p].ls].siz)
y = p, split(tr[p].ls, k, x, tr[p].ls);
else x = p, split(tr[p].rs, k - tr[tr[p].ls].siz - 1, tr[p].rs, y);
pushup(p);
}
}
int merge(int x, int y)
{
if (!x || !y) return x + y;
if (tr[x].rnd < tr[y].rnd)
{
tr[x].rs = merge(tr[x].rs, y);
pushup(x); return x;
}
else{
tr[y].ls = merge(x, tr[y].ls);
pushup(y); return y;
}
}
void insert(int k, int v)
{
int a, b;
split(rt, k, a, b);
rt = merge(a, merge(new_node(v), b));
}
int kth(int k)
{
int a, b, c, d;
split(rt, k - 1, a, b), split(b, 1, c, d);
merge(a, merge(c, d));
return tr[c].val;
}
int main()
{
srand(time(0));
scanf("%d", &n);
for(register int i = 1; i <= n; ++i) scanf("%s", s[tot++]), insert(i - 1, tot - 1);
scanf("%d", &m);
for(register int i = 1, x; i <= m; ++i) scanf("%s", s[tot++]), insert(x = read(), tot - 1);
scanf("%d", &q);
for(register int i = 1, x; i <= q; ++i) x = read(), printf("%s\n", s[kth(x + 1)]);
}
[TJOI2007]书架的更多相关文章
- [TJOI2007]书架 题解
文中给了你一些句子,以及让你任意插入某个位置以及查询某个位置的句子. 发现因为是句子很难搞,所以开个 map 离散一下成数字.然后在额外开一个 map 记录这个数字对应的句子. 然后你要写一种支持插入 ...
- P3850 [TJOI2007]书架
题目描述 Knuth先生家里有个精致的书架,书架上有N本书,如今他想学到更多的知识,于是又买来了M本不同的新书.现在他要把新买的书依次插入到书架中,他已经把每本书要插入的位置标记好了,并且相应的将它们 ...
- Luogu3850 [TJOI2007]书架 (平衡树)
将要插入位置前和前前splay,再连在右子树上. #include <iostream> #include <cstdio> #include <cstring> ...
- [BZOJ1861][Zjoi2006]Book 书架
[BZOJ1861][Zjoi2006]Book 书架 试题描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候 ...
- Android分享一款漂亮的折叠书架菜单
一个Android折叠书架菜单,效果极佳,给人的视觉感觉很好,便于使用. FoldingMenu
- [转载]我的Java后端书架 (2016年暖冬4.0版)
[转载]我的Java后端书架 (2016年暖冬4.0版) ps:最近正在初学Java,有一些其他语言的底子,但是还是要好好看书,好好练习,网上找了好久,都没有这份书单来的实用,特意转载过来,方便以 ...
- BZOJ 1861: [Zjoi2006]Book 书架
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1290 Solved: 740[Submit][Stat ...
- 基于HT的CSG功能构建HTML5的3D书架
构造实体几何CSG全称Constructive solid geometry,是3D计算机图形学中构建模型的常用技术,可通过合并Union.相减Subtraction和相交Intersction的三种 ...
- 【代码笔记】iOS-点击加号增加书架,点击减号减少书架
一,效果图. 二,工程图. 三,代码. ReaderViewController.h #import <UIKit/UIKit.h> @interface ReaderViewContro ...
- 【BZOJ-1926】粟粟的书架 二分 + 前缀和 + 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 616 Solved: 238[Submit][Statu ...
随机推荐
- linux server设置开机自动连接WIFI
1.前言 之前买了一个工控机,装过几个OS(linux 发行版),但是一直没有细研究过流程,只是停留在能用就不管了,工控机自带无线网卡(和俩个有线网口),所以这篇文章好好介绍如何开机自动连接WIFI( ...
- 盘点现在用的SqlServer 5种分页方式和拉姆达表达式分页,进来看看吧。
现在基本上大家都在使用各种轮子自带的分页,大家是否还记得sql分页怎么写? 今天我们就来盘一盘怎么写和用哪种方式写. 欢迎大家评论区讨论. 1.ROW_NUMBER() OVER()方式(SQL201 ...
- week_5
Andrew Ng机器学习笔记---by Orangestar Week_5 重点:反向传播算法,backpropagation 1. Cost Function神经元的代价函数 回顾定义:(上节回顾 ...
- JavaScript:变量:如何声明变量?
声明变量可以用下面几种方式: 但是这几种声明方式肯定是有区别的,主要是上面三种方式的区别,这需要结合window对象和作用域来说明,这里不赘述. 声明变量的时候,推荐使用let,这是ES6新推出的更好 ...
- texlive2021编译中文
环境 Windows 10 编译 测试latex代码 \documentclass{article} \usepackage[UTF8]{ctex} \begin{document} 中文输入 \en ...
- 5、枚举Enum
枚举类会隐式的继承Enum类,无法再继承其它类(单继承机制) 一.无实参枚举类型: 1.定义: /** * 1.无实参枚举类型 */ public enum NoParamTypeEnums { SP ...
- 1+x初级Web的关键词填写
H5+CSS: 声明HTML网页标准:<!DOCTYPE> 图片标签 img css颜色样式color 定位 position 绝对absolute 相对 relative 外边距:mar ...
- 【转载】SQL SERVER 通过对汉字、字母和数字的Unicode码区间的判断来识别字符串
A~Z :65~90 a~z :97~122 0-9 : 48-57 –汉字unicode编码范围:[0x4e00,0x9fa5](或十进制[19968,40869]) SELECT * FR ...
- 分享一个自己封装且一直在维护的依赖.net4.5的http异步组包工具类(支持get,post( 表单 ,json, 包含图片等文件的流提交) ,cookie管理,自动跳转,代理IP,https的支持,高并发的配置等等
1.)Nuget安装: 搜索 ConfigLab.Comp, 安装最新版即可. 2.)组包示例. 2.1)模拟post表单提交并包含普通参数和一个图片文件(基于HttpFileUploadAssist ...
- Hadoop详解(09) - Hadoop新特性
Hadoop详解(09) - Hadoop新特性 Hadoop2.x新特性 远程主机之间的文件复制 scp实现两个远程主机之间的文件复制 推 push:scp -r hello.txt root@ha ...