Splay初步【bzoj1503】
做了一道水题,把bzoj1503用Splay重新写了一下。
1 #include <bits/stdc++.h> 2 #define rep(i, a, b) for (int i = a; i <= b; i++) 3 #define REP(i, a, b) for (int i = a; i < b; i++) 4 #define drep(i, a, b) for (int i = a; i >= b; i--) 5 #define mp make_pair 6 #define pb push_back 7 #define clr(x) memset(x, 0, sizeof(x)) 8 #define xx first 9 #define yy second 10 using namespace std; 11 typedef long long i64; 12 typedef pair<int, int> pii; 13 const int inf = ~0U >> 1; 14 const i64 INF = ~0ULL >> 1; 15 //*************************** 16 17 struct node { 18 node *pre, *s[2]; 19 int key, size, mul; 20 node() { pre = s[0] = s[1] = 0; size = mul = 1; } 21 node(int _key) :key(_key) { pre = s[0] = s[1] = 0; size = mul = 1; } 22 bool getlr() { return pre->s[1] == this; } 23 node *link(int w, node *p) { s[w] = p; if (p) p->pre = this; return this; } 24 void update() { size = mul + (s[0] ? s[0]->size : 0) + (s[1] ? s[1]->size : 0); } 25 } *root; 26 void rot(node* p) { 27 node *q = p->pre->pre; 28 p->getlr() ? p->link(0, p->pre->link(1, p->s[0])) : p->link(1, p->pre->link(0, p->s[1])); 29 p->pre->update(); 30 if (q) q->link(q->s[1] == p->pre, p); 31 else { p->pre = 0; root = p; } 32 } 33 void splay(node *p, node *tar) { 34 while (p->pre != tar && p->pre->pre != tar) 35 p->getlr() == p->pre->getlr() ? (rot(p->pre), rot(p)) : (rot(p), rot(p)); 36 if (p->pre) rot(p); 37 p->update(); 38 } 39 void insrt(int k) { 40 node *p = root, *q = NULL; 41 while (p) { 42 q = p; 43 if (k > p->key) p = p->s[1]; 44 else if (k < p->key) p = p->s[0]; 45 else break; 46 } 47 if (!p) {p = new node(k); 48 if (!q) { root = p; return; } 49 q->link(q->key < k, p); q->update(); splay(p, 0); 50 } 51 else { p->mul++; splay(p, 0); } 52 } 53 node *findkth(int x) { 54 node *p = root; 55 node *t; 56 while (1) { 57 int w = (p->s[0] ? p->s[0]->size : 0); 58 if (x <= w) t = p->s[0]; 59 else if (x > w + p->mul) { x -= w + p->mul; t = p->s[1]; } 60 else break; 61 p = t; 62 } 63 splay(p, 0); return p; 64 } 65 66 node *find(node *p, int x) { 67 if (p->key < x) return find(p->s[1], x); 68 else if (p->key > x) return find(p->s[0], x); 69 else return p; 70 } 71 72 int main() { 73 int ori(0); 74 int n, m; 75 scanf("%d%d", &n, &m); 76 int tot(0); 77 char op[5]; int x; 78 while (n--) { 79 scanf("%s%d", op, &x); 80 if (op[0] == 'I') { 81 if (x >= m) { 82 ori++; 83 insrt(x - tot); 84 } 85 } 86 else if (op[0] == 'A') tot += x; 87 else if (op[0] == 'S') { 88 tot -= x; 89 insrt(m - tot - 1); 90 splay(find(root, m - tot - 1), 0); 91 root = root->s[1]; 92 if (root) root->pre = 0; 93 } 94 else if (op[0] == 'F') { 95 if (!root || x > root->size) puts("-1"); 96 else printf("%d\n", findkth(root->size - x + 1)->key + tot); 97 } 98 } 99 printf("%d\n", ori - (root ? root->size : 0)); 100 return 0; 101 }
View Code
转载于:https://www.cnblogs.com/y7070/p/5018974.html
Splay初步【bzoj1503】相关推荐
- 【题解】 bzoj1503: [NOI2004]郁闷的出纳员 (Splay)
bzoj1503,懒得复制,戳我戳我 Solution: 我知不知道我是那根筋抽了突然来做splay,调了起码\(3h+\),到第二天才改出来(我好菜啊),当做训练调错吧 一个裸的splay,没啥好说 ...
- [BZOJ1503]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- BZOJ1503(Splay)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 #include <iostream> #include <strin ...
- 【codevs1286】【BZOJ1503】郁闷的出纳员,splay练习
传送门1 传送门2 写在前面:代码一长,细节问题就多了起来,还是需要熟练啊 思路:插入,删除,查第k大的splay,再加一个改值函数,因为改动工资的操作很少(才100),所以直接暴力从根开始往下改,小 ...
- 【算法详解】splay的初步了解
qwq表示最近感受到了不停课的鸭梨啊,好难搞啊--算法太难学了--我好菜啊qwq 其实半个多月前就可以写这篇文章,不过由于时间紧张没写emmmmmm,不扯闲言乱语了,如果有什么写的不好的地方凑活一下吧 ...
- bzoj3786星系探索 splay
3786: 星系探索 Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1314 Solved: 425 [Submit][Status][Discu ...
- bzoj3786星系探索(splay维护dfs序)
Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个依赖星球.主星球 ...
- TensorRT 7.2.1开发初步
TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...
- SOC,System on-a-Chip技术初步
SOC,System on-a-Chip技术初步 S O C(拼作S-O-C)是一种集成电路,它包含了电子系统在单个芯片上所需的所有电路和组件.它可以与传统的计算机系统形成对比,后者由许多不同的组件组 ...
最新文章
- Python OpenCV分水岭算法分割和提取重叠或有衔接的图像中的对象
- 盖尔-沙普利算法_盖尔定律-及其与初创企业的关系
- 【高斯消元】兼 【期望dp】例题
- 【转摘】IT人日常的学习—中国消费产业的基本盘和机遇
- 触发bfc的html元素,什么是BFC? CSS 使用伪元素清除浮动的方法
- android 安装卸载应用提醒_Android程序使用代码的安装和卸载!!!
- 即将开播!联想可能成为罗永浩直播带货的首批合作者
- [前缀和][dp] Jzoj P5873 小p的属性
- linux安装tftp服务器
- ASP.NET MVC4 高级编程
- 计算机二进制技巧,计算机中十进制转二进制的相关技巧
- 动词变名词的变化规则_动词变名词的规则?(要求完整)
- dedecms pm.php,dedecms /member/pm.php SQL Injection Vul
- Java Duration格式
- 志愿者招募| WasmEdge 邀你参加第七届中国开源年会 COSCon 2022
- 如何通过知识付费盈利,实现内容变现?
- 源码解读ReDet:A Rotation-equivariant Detector for Aerial Object Detection
- emacs 基本配置
- uniapp打开外部应用如:浏览器、淘宝、 微信方法
- 100个台阶,一次走一步,走两步,走三步,有多少种可能
热门文章
- 迭代之嵌套的for循环
- 数据结构排序法之希尔排序法(Shell Sort)
- UPS开始尝试“货车+无人机”的投递方式,不必再担心快递员离职了
- Spring整合Quartz定时任务 在集群、分布式系统中的应用(Mysql数据库环境)
- python爬虫从入门到放弃(六)之 BeautifulSoup库的使用
- eth一张_听说eth2.0利好落地了?那么为何eth反而涨了?
- du -sh 如何找到最大的文件夹_小白必看!手把手教你如何在linux上安装redis数据库...
- Python 第三方模块之 pdfkit
- 数据分级分类实施指南_运营商行业数据安全治理实践
- Linux系统7个运行级别图文详解