做了一道水题,把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】相关推荐

  1. 【题解】 bzoj1503: [NOI2004]郁闷的出纳员 (Splay)

    bzoj1503,懒得复制,戳我戳我 Solution: 我知不知道我是那根筋抽了突然来做splay,调了起码\(3h+\),到第二天才改出来(我好菜啊),当做训练调错吧 一个裸的splay,没啥好说 ...

  2. [BZOJ1503]郁闷的出纳员(Splay)

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  3. BZOJ1503(Splay)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 #include <iostream> #include <strin ...

  4. 【codevs1286】【BZOJ1503】郁闷的出纳员,splay练习

    传送门1 传送门2 写在前面:代码一长,细节问题就多了起来,还是需要熟练啊 思路:插入,删除,查第k大的splay,再加一个改值函数,因为改动工资的操作很少(才100),所以直接暴力从根开始往下改,小 ...

  5. 【算法详解】splay的初步了解

    qwq表示最近感受到了不停课的鸭梨啊,好难搞啊--算法太难学了--我好菜啊qwq 其实半个多月前就可以写这篇文章,不过由于时间紧张没写emmmmmm,不扯闲言乱语了,如果有什么写的不好的地方凑活一下吧 ...

  6. bzoj3786星系探索 splay

    3786: 星系探索 Time Limit: 40 Sec  Memory Limit: 256 MB Submit: 1314  Solved: 425 [Submit][Status][Discu ...

  7. bzoj3786星系探索(splay维护dfs序)

    Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个依赖星球.主星球 ...

  8. TensorRT 7.2.1开发初步

    TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...

  9. SOC,System on-a-Chip技术初步

    SOC,System on-a-Chip技术初步 S O C(拼作S-O-C)是一种集成电路,它包含了电子系统在单个芯片上所需的所有电路和组件.它可以与传统的计算机系统形成对比,后者由许多不同的组件组 ...

最新文章

  1. Python OpenCV分水岭算法分割和提取重叠或有衔接的图像中的对象
  2. 盖尔-沙普利算法_盖尔定律-及其与初创企业的关系
  3. 【高斯消元】兼 【期望dp】例题
  4. 【转摘】IT人日常的学习—中国消费产业的基本盘和机遇
  5. 触发bfc的html元素,什么是BFC? CSS 使用伪元素清除浮动的方法
  6. android 安装卸载应用提醒_Android程序使用代码的安装和卸载!!!
  7. 即将开播!联想可能成为罗永浩直播带货的首批合作者
  8. [前缀和][dp] Jzoj P5873 小p的属性
  9. linux安装tftp服务器
  10. ASP.NET MVC4 高级编程
  11. 计算机二进制技巧,计算机中十进制转二进制的相关技巧
  12. 动词变名词的变化规则_动词变名词的规则?(要求完整)
  13. dedecms pm.php,dedecms /member/pm.php SQL Injection Vul
  14. Java Duration格式
  15. 志愿者招募| WasmEdge 邀你参加第七届中国开源年会 COSCon 2022
  16. 如何通过知识付费盈利,实现内容变现?
  17. 源码解读ReDet:A Rotation-equivariant Detector for Aerial Object Detection
  18. emacs 基本配置
  19. uniapp打开外部应用如:浏览器、淘宝、 微信方法
  20. 100个台阶,一次走一步,走两步,走三步,有多少种可能

热门文章

  1. 迭代之嵌套的for循环
  2. 数据结构排序法之希尔排序法(Shell Sort)
  3. UPS开始尝试“货车+无人机”的投递方式,不必再担心快递员离职了
  4. Spring整合Quartz定时任务 在集群、分布式系统中的应用(Mysql数据库环境)
  5. python爬虫从入门到放弃(六)之 BeautifulSoup库的使用
  6. eth一张_听说eth2.0利好落地了?那么为何eth反而涨了?
  7. du -sh 如何找到最大的文件夹_小白必看!手把手教你如何在linux上安装redis数据库...
  8. Python 第三方模块之 pdfkit
  9. 数据分级分类实施指南_运营商行业数据安全治理实践
  10. Linux系统7个运行级别图文详解