博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HYSBZ 1503 郁闷的出纳员 伸展树
阅读量:6672 次
发布时间:2019-06-25

本文共 2148 字,大约阅读时间需要 7 分钟。

  题目链接: https://vjudge.net/problem/26193/origin

  题目描述: 中文题面.......

  解题思路: 伸展树, 需要伸展树的模板, 突然发现自己昨天看到的模板不是太好, 现在又新找了一个,  很简练, 自己将模板的实现从头到尾看了一遍, 觉得数组实现的实在是非常的巧妙, 然后自己照着敲了一遍, 边敲边看, 崩掉了.....肯定是哪里手残了, 没有必要浪费时间去改了, 有那时间不如看点别的

  代码: 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int Max = 100010;const int INF = 0x3f3f3f3f;struct SplayTree{ int num[Max],pre[Max],next[Max][2],key[Max]; int root,Size; void PushUp(int x) //向上更新,计算以自己为根节点的树中节点的个数 { num[x] = num[next[x][0]] + num[next[x][1]]+1; } void Rotate(int x,int kind)//伸展操作 { int y = pre[x]; int z = pre[y]; next[y][!kind] = next[x][kind]; pre[next[x][kind]] = y; next[z][next[z][1]==y] = x; pre[x] = z; next[x][kind] = y; pre[y] = x; PushUp(y); PushUp(x); } void Splay(int x,int goal) { if(x!=goal) { while(pre[x]!=goal) { if(next[pre[x]][0] == x) { Rotate(x,1); } else Rotate(x,0); } } if(!goal) root = x; } void NewNode(int &x,int y,int val) { x = ++Size; num[x] = 1; pre[x] = y; next[x][0] = next[x][1] = 0; key[x] = val; next[y][val>key[y]] = x; } void Insert(int val)//插入节点 { int x,y; for(x = root,y = 0;x;x = next[x][val>key[x]]) { y = x; num[x]++; } NewNode(x,y,val); Splay(x,0); } int Search(int val) //查询比小于等于val的节点的位置 { int res,x; for(res = 0, x = root;x;x = next[x][val>key[x]]) { if(key[x] >= val && key[res] >= key[x]) { res = x; } } return res; } int Select(int k)//查找第k大。 { int x = root; k = num[root]-k; for(x = root; num[next[x][0]]+1!=k;) { if(num[next[x][0]]+1
= Mi) { Tr.Insert(data-Mi+diff); } } else if(op[0] == 'A') { diff-=data; } else if(op[0] == 'S') { diff += data; Tr.Splay(Tr.Search(diff),0); ans+=Tr.num[Tr.next[Tr.root][0]]; Tr.num[Tr.root] -= Tr.num[Tr.next[Tr.root][0]]; Tr.next[Tr.root][0] = 0; } else { if(data>=Tr.num[Tr.root]) { printf("-1\n"); } else { printf("%d\n",Tr.Select(data)+Mi-diff); } } } printf("%d\n",ans); } return 0;}
View Code

  思考: 自己数据结构的知识是真的需要好好的加强, 然后自己应该照着组合数学的题单搞一搞了

转载于:https://www.cnblogs.com/FriskyPuppy/p/7553970.html

你可能感兴趣的文章
战略合作背后的秘密:VMware沦为AWS的渠道商?
查看>>
day1-接口测试_jmeter_postman
查看>>
Python 文件操作
查看>>
java 中的流程控制
查看>>
Ubuntu 安装 Docker
查看>>
Vue.js 插件开发详解
查看>>
python练习2
查看>>
nodejs中的 Cannot read property'text' of undefined 问题
查看>>
python 函数的定义
查看>>
袁帅:用科技技术助力效益转化 剖析当前会议互动中的移动互联网科技
查看>>
关于机器级二进制位移
查看>>
windows7 10 windows2008 windws2012 nfs客户端的安装
查看>>
Spring Cloud--Honghu Cloud分布式微服务云系统—System系统管理
查看>>
MySQL数据库源码包安装(5.7最新版本)
查看>>
CentOS 7 yum安装zabbix 设置中文界面
查看>>
Django1.11启动错误:Generator expression must be parent
查看>>
SSH协议服务器、SUDO用法以及PAM机制
查看>>
CSS如何让li 4个一行显示
查看>>
杭州雄迈信息技术有限公司被评为“杭州市专利试点企业”
查看>>
ManageEngine网络管理软件新特点
查看>>