看了那么多题解都没做对,结果今早上按自己的思路和模板做了做,然后过了。

平衡树裸题

直接上代码:

#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 无指针的更多相关文章

  1. 洛谷P2073 送花 [2017年6月计划 线段树01]

    P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花 ...

  2. 洛谷 P2073 送花【Treap】题解+AC代码

    题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地向里面 ...

  3. [洛谷P2073] 送花

    送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地 ...

  4. 洛谷 P2073 送花

    这题其实可以用vector水掉! 定义: 记住要用结构体(c为价格,x为美丽值)! 以c排序. struct Node { int x,c; bool operator < (const &am ...

  5. 【洛谷】【treap/堆】P2073 送花

    [题目描述:] 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地向里面添加花.他有以下几种操作: 操作 含义 1 W C 添加一朵美丽值为W,价格为C的花. 3 小 ...

  6. 洛谷 - P4567 - 文本编辑器 - 无旋Treap

    https://www.luogu.org/problem/P4567 事实证明无旋Treap是不是不可能会比Splay快? #include<bits/stdc++.h> using n ...

  7. 洛谷 - P4008 - 文本编辑器 - 无旋Treap

    https://www.luogu.org/problem/P4008 无旋Treap也可以维护序列. 千万要注意要先判断p节点存在才进行Show操作,不然输出一个'\0'(或者RecBin里面的东西 ...

  8. AC日记——送花 洛谷 P2073

    送花 思路: 线段树: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct TreeN ...

  9. 【洛谷P3224】永无乡 并查集+Splay启发式合并

    题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...

随机推荐

  1. 从 Notion 分片 Postgres 中吸取的教训(Notion 工程团队)

    https://www.notion.so/blog/sharding-postgres-at-notion 今年(2021)早些时候,我们对 Notion 进行了五分钟的定期维护. 虽然我们的声明指 ...

  2. 开源框架 WebFirst 一键生成项目,在线建表

    1.WebFirst框架描述 WebFirst  是果糖大数据团队开发的新一代 高性能 代码生成器&数据库设计工具,由.net core 3.1 + sqlsugar 开发 导入1000个表只 ...

  3. Linux-Mycat实现MySQL的读写分离

    centos8 服务器共三台 client                  10.0.0.88        mariadb-10.4.24 mycat-server     10.0.0.18  ...

  4. Dart 2.17 正式发布

    文/ Michael Thomsen, Google Dart 团队产品经理,2022 年 5 月 12 日发表于 Dart 官方博客 随着 Flutter 3 在本次 I/O 大会的发布,我们也同时 ...

  5. CNN Training Loop Refactoring Simultaneous Hyperameter Testing

    上例中, 尝试两个不同的值 为此: alt+shift可以有多个光标,再jupyter notebook中. alt+d,alt+shift,ctrl+鼠标左键多点几个,都可以同时选择多个目标,并进行 ...

  6. 浏览器代理user-agent

    两种方法: 法1:浏览器地址栏输入:about://version,然后复制用户代理: 如果法1不行,法2肯定可以. 法2:打开任意浏览器,输入任意网址,下面以火狐和百度网址为例来进行说明: 打开火狐 ...

  7. c++ 辗转相除(动图)

    #include<iostream> #include<cstdio> #include<iomanip> #include<cstring> usin ...

  8. 第2章 C++编程入门

    C++中的数据分为常量和变量. 2.1常量(Constants) 顾名思义,常量的值在程序中不能改变 Type of constant(常量数据类型) | integer:整型 | floating- ...

  9. 蓝牙、WiFi、ZigBee三大无线通信技术协议模块哪一个是最好的?

    曾经,在2015年极客公园创新大会上,小米首次在非官方平台发布了新款产品小米智能家庭套装.自此,Zigbee便常出现在大众视野中. 如今,小米在IoT物联网应用开发者平台上明确说明,不再推广Zigbe ...

  10. Wireshark学习笔记(一)常用功能案例和技巧

    @ 目录 常用功能 1.统计->捕获属性 2.统计->协议分级 3.过滤包Apply as filter E1:过滤出特定序号的包 E2:过滤出某IP地址或端口 E3:导出php文件 E4 ...