洛谷 P2073 送花 treap 无指针
看了那么多题解都没做对,结果今早上按自己的思路和模板做了做,然后过了。
平衡树裸题
直接上代码:
#include<bits/stdc++.h>
#define rint register int
typedef long long ll;
using namespace std;
inline ll read()
{
ll x=0;
bool fg=false;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') fg=true;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return fg?~x+1:x;
}
const int N=1e5+10;
int cnt,rt;
int ch[N][2];
ll ml_sum,jg_sum;
ll ml[N],jg[N],pri[N];
//ml 美丽值 jg 价格
int add(ll w,ll c)
{
ml[++cnt]=w;
jg[cnt]=c;
ml_sum+=w;//记录总和
jg_sum+=c;
pri[cnt]=rand();
return cnt;
}
void spin(int &id,int d)
{
int temp=ch[id][d^1];
ch[id][d^1]=ch[temp][d];
ch[temp][d]=id;
id=temp;
}
void insert(int &id,ll w,ll c)
{
if(!id)
{
id=add(w,c);
return;
}
if(jg[id]==c) return;
int d=c<jg[id]?0:1;
insert(ch[id][d],w,c);
if(pri[ch[id][d]]>pri[id])
spin(id,d^1);
}
int find(bool f)
{
int id=rt;
if(f) while(ch[id][1]) id=ch[id][1];//找最大值
else
{
while(ch[id][0]) id=ch[id][0];//找最小值
}
return id;
}
void del(int &id,ll c)
{
if(!id) return;
if(jg[id]==c)
{
if(ch[id][0]||ch[id][1])
{
int d=pri[ch[id][0]]>pri[ch[id][1]]?1:0;
spin(id,d);
del(ch[id][d],c);
}
else
{
jg_sum-=jg[id],jg[id]=0;//更新总和
ml_sum-=ml[id],ml[id]=0;
pri[id]=-1;
id=0;
}
}
else
{
int d=c<jg[id]?0:1;
del(ch[id][d],c);
}
}
int main()
{
int op=read();
while(op!=-1)
{
if(op==1)
{
ll w=read(),c=read();
insert(rt,w,c);
}
if(op==3)
{
int x=find(0);
del(rt,jg[x]);
}
if(op==2)
{
int x=find(1);
del(rt,jg[x]);
}
op=read();
}
printf("%lld %lld\n",ml_sum,jg_sum);
return 0;
}
洛谷 P2073 送花 treap 无指针的更多相关文章
- 洛谷P2073 送花 [2017年6月计划 线段树01]
P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花 ...
- 洛谷 P2073 送花【Treap】题解+AC代码
题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地向里面 ...
- [洛谷P2073] 送花
送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地 ...
- 洛谷 P2073 送花
这题其实可以用vector水掉! 定义: 记住要用结构体(c为价格,x为美丽值)! 以c排序. struct Node { int x,c; bool operator < (const &am ...
- 【洛谷】【treap/堆】P2073 送花
[题目描述:] 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地向里面添加花.他有以下几种操作: 操作 含义 1 W C 添加一朵美丽值为W,价格为C的花. 3 小 ...
- 洛谷 - P4567 - 文本编辑器 - 无旋Treap
https://www.luogu.org/problem/P4567 事实证明无旋Treap是不是不可能会比Splay快? #include<bits/stdc++.h> using n ...
- 洛谷 - P4008 - 文本编辑器 - 无旋Treap
https://www.luogu.org/problem/P4008 无旋Treap也可以维护序列. 千万要注意要先判断p节点存在才进行Show操作,不然输出一个'\0'(或者RecBin里面的东西 ...
- AC日记——送花 洛谷 P2073
送花 思路: 线段树: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct TreeN ...
- 【洛谷P3224】永无乡 并查集+Splay启发式合并
题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...
随机推荐
- 探索ABP基础架构
为了了解应用程序是如何配置和初始化,本文将探讨ASP.NET Core和ABP框架最基本的构建模块.我们将从 ASP.NET Core 的 Startup类开始了解为什么我们需要模块化系统,以及 AB ...
- API 工程化分享
概要 本文是学习B站毛剑老师的<API 工程化分享>的学习笔记,分享了 gRPC 中的 Proto 管理方式,Proto 分仓源码方式,Proto 独立同步方式,Proto git sub ...
- [Java反序列化]jdk原生链分析
jdk原生链分析 原文链接 作为jdk中目前发现的原生链,还是有必要要分析这个用法的.全文仅限尽可能还原挖掘思路 JDK7u21 在很多链中,TemplatesImpl一直发挥着不可或缺的作用,它是位 ...
- linux篇-Parse error: syntax error, unexpected ‘new’ (T_NEW) in /usr/local/nginx/html/cacti/lib/adodb
1首先这是基于lnmp模式进行的 2yum安装 yum -y install httpd mysql mysql-server php php-mysql php-json php-pdo 3lib库 ...
- 个人冲刺(七)——体温上报app(二阶段)
冲刺任务:完成特殊情况功能 MoreActivity.java package com.example.helloworld; import android.content.Intent; impor ...
- consul系列文章02---替换掉.netcore的配置文件
如果是开发微服务的项目,多个服务的配置管理起来比较麻烦,需要集中管理,也就是需要有配置中心: consul集成配置中心的思路:读取配置文件时不在从本地的应用中读取,而是从consul的KEY/valu ...
- Kafka到底有多高可靠?(RNG NB)
在聊Kafka高可靠之前,先在评论区来波RNG NB好不好! 什么叫可靠性? 大家都知道,系统架构有三高:「高性能.高并发和高可用」,三者的重要性不言而喻. 对于任意系统,想要同时满足三高都是一件非常 ...
- 《C Primer Plus》第六版笔记--1~3章
目录 第一章 初识C语言 1 使用C语言的7个步骤 1.1 定义程序目标 1.2 设计程序(功能实现) 1.3 编写代码 1.4 编译 1.5 运行程序 1.6 测试和调试程序 1.7 维护和修改代码 ...
- vue-property-decorator
vue-property-decorator使我们能在vue组件中写TypeScript语法,依赖于vue-class-component 装饰器:@Component.@Prop.@PropSync ...
- mybatis-plus对空字段 时间进行填充
package com.tanhua.sso.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; imp ...