[Luogu 2073] 送花
<题目链接>
很容易想到的平衡树,加个维护区间和。
只需要插入和删除操作即可。
kth其实都不用的,最小和最大可以从根节点log n一直向左/一直向右跑到叶子节点而求得。
记得每插入完一个点一定要更新区间和!!更新区间和!!更新区间和!!
我就因为没更新,导致出来答案都是随机的,有时候对,有时候不对。
关于平衡树不多说啦,关于平衡树(Treap)的教程请看这里。
上代码。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
const int MAXN=100010;
int n,w,x;
class Treap
{
public:
Treap(void)
{
rt=cnt=0;
memset(a,0,sizeof a);
memset(s,0,sizeof s);
}
void Insert(int w,int x)
{
_Insert(rt,w,x);
}
void Delete(bool l)
{
int i=Find(rt,l);
_Delete(rt,s[i].w,s[i].v);
}
void Answer(void)
{
printf("%d %d",s[rt].bty,s[rt].val);
}
private:
bool a[MAXN];
int rt,cnt;
struct node
{
int l,r,w,v,p,bty,val;
}s[MAXN];
int Random(void)
{
int x;
while(a[x=rand()%MAXN]);
a[x]=1;
return x;
}
void Update(int i)
{
s[i].bty=s[s[i].l].bty+s[s[i].r].bty+s[i].w;
s[i].val=s[s[i].l].val+s[s[i].r].val+s[i].v;
}
void L_Rotate(int &i)
{
int t=s[i].r;
s[i].r=s[t].l,s[t].l=i;
Update(i),Update(t),i=t;
}
void R_Rotate(int &i)
{
int t=s[i].l;
s[i].l=s[t].r,s[t].r=i;
Update(i),Update(t),i=t;
}
void _Insert(int &i,int w,int x)
{
if(!i)
{
s[i=++cnt].bty=s[i].w=w,s[i].val=s[i].v=x;
s[i].p=Random();
return;
}
if(x==s[i].v)
return;
if(x<s[i].v)
{
_Insert(s[i].l,w,x);
if(s[s[i].l].p>s[i].p)
R_Rotate(i);
}
else
{
_Insert(s[i].r,w,x);
if(s[s[i].r].p>s[i].p)
L_Rotate(i);
}
Update(i);//一定要更新!!
}
void _Delete(int &i,int w,int x)
{
if(!i)
return;
if(x==s[i].v)
{
if(!s[i].l || !s[i].r)
i=s[i].l | s[i].r;
else if(s[s[i].l].p>s[s[i].r].p)
R_Rotate(i),_Delete(i,w,x);
else
L_Rotate(i),_Delete(i,w,x);
return;
}
s[i].bty-=w,s[i].val-=x;
if(x<s[i].v)
_Delete(s[i].l,w,x);
else
_Delete(s[i].r,w,x);
}
int Find(int i,bool l)
{
if(l)
while(s[i].l)
i=s[i].l;
else
while(s[i].r)
i=s[i].r;
return i;
}
}T;
int main(int argc,char *argv[])
{
srand((unsigned)time(NULL));
while(~scanf("%d",&n) && ~n)
switch(n)
{
case 1:
scanf("%d %d",&w,&x);
T.Insert(w,x);
break;
case 2:
T.Delete(0);
break;
case 3:
T.Delete(1);
break;
}
T.Answer();
return 0;
}
谢谢阅读
[Luogu 2073] 送花的更多相关文章
- 【题解】Luogu P2073 送花
原题传送门 这题需要用到Splay 我们用一棵splay维护金钱 考虑c<=1000000 我们珂以把每种价格现在对应的美丽值存在一个a数组中 这样讲有珂能不太清楚qaq,还是对着操作一个一个讲 ...
- luogu P2073 送花 线段树
思路&心路 一眼认定沙比提 写的比较慢,写了1小时吧 开心的交上去 卧槽,只有20? 不服不服,拿着题解的代码去对拍 Emma,<100没问题 100000数据错了,还只是错了一个数据 ...
- Luogu P2073 送花 set
这题...一眼set...但是打了一会儿.. 记录一下每个价格对应的美丽度,顺便充当vis数组,如果美丽度不为0,说明set里已经有了... 删除好说,删*s.begin()和*--s.end()就好 ...
- Luogu P2073 送花
权值线段树的模板题 然而AC后才发现,可以用\(\tt{set}\)水过-- 权值线段树类似于用线段树来实现平衡树的一些操作,代码实现还是比较方便的 #include<iostream> ...
- Splay详解
平衡树实际很简单的 以下讲解都以Luogu P3369 [模板]普通平衡树为例 我不会带指针的Splay,所以我就写非指针型的Splay Splay是基于二叉查找树(bst)实现的 什么是二叉查找树呢 ...
- [Luogu] 送花
https://www.luogu.org/problemnew/show/2073 自己yy,明显错 #include <bits/stdc++.h> using namespace s ...
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- ural 2073. Log Files
2073. Log Files Time limit: 1.0 secondMemory limit: 64 MB Nikolay has decided to become the best pro ...
随机推荐
- Alpha发布文案加美工展示
目录 团队简介 项目进展 组内分工 队员总结 后期计划 一.团队简介 二.项目进展 从选题发布到今天的Alpha发布,我们团队经历了许许多多的磨难.我们最终设计了如下的功能:首页.班级.个人.更多.打 ...
- Thunder团队第二周 - Scrum会议5
Scrum会议5 小组名称:Thunder 项目名称:爱阅app Scrum Master:苗威 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康 ...
- Android开发 使用 adb logcat 显示 Android 日志
作者 : 万境绝尘 转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 ...
- # ML学习小笔记—Classification
关于本课程的相关资料http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html 通过模型可以分类输入,此时根据分类结果的正确与否会有一个Loss函数.找 ...
- <Effective C++>读书摘要--Inheritance and Object-Oriented Design<二>
<Item 36> Never redefine an inherited non-virtual function 1.如下代码通过不同指针调用同一个对象的同一个函数会产生不同的行为Th ...
- C# Winform Excel的导出,根据excel模板导出数据
namespace dxhbskymDemo { public partial class ExcelForm : DevExpress.XtraEditors.XtraForm { public E ...
- 【bzoj4300】绝世好题 dp
题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入 输入文件共2行. 第一行包括一个整数n. 第二行包括n个 ...
- P1365 WJMZBMR打osu! / Easy
题目背景 原 维护队列 参见P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有 nnn 次点击要做,成功了就是o,失败了 ...
- HDFS文件操作命令手册
HDFS文件操作的基本格式是: bin/hadoop dfs -cmd <args> 1. cat $ hadoop dfs -cat URI [URI …] #将参数所指示的文件的内容输 ...
- Elasticsearch Query DSL备忘(1)(Constant score query和Bool Query)
Query DSL (Domain Specific Language),基于json的查询方式 1.Constant score query,常量分值查询,目的就是返回指定的score,一般都结合f ...