今天下午先写一个Splay水题来复习一下Splay模板。是不是有点太水了做这种水题我有点良心不安。

可笑的是一开始我竟然WA了一组,看来是我低估水题的数据范围了,我是空节点直接返回inf或-inf,明显是不合理的。比赛时再犯这种低级错误就真的滚粗了。

2016-07-29 当时我确实狂妄自大~~~~(>_<)~~~~

#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=1E9;
inline const int max(const int &a,const int &b){return a>b?a:b;}
inline const int min(const int &a,const int &b){return a<b?a:b;}
struct node{
node();
node *fa,*ch[2];
int d;
short pl(){return this==fa->ch[1];}
}*null;
node::node(){ch[0]=ch[1]=fa=null;}
namespace Splay{
node *ROOT;
void build(){
null=new node;
*null=node();
ROOT=null;
}
void rotate(node *k){
node *r=k->fa; if (k==null||r==null) return;
int x=k->pl()^1;
r->ch[x^1]=k->ch[x];
r->ch[x^1]->fa=r;
if (r->fa==null) ROOT=k;
else r->fa->ch[r->pl()]=k;
k->fa=r->fa; r->fa=k;
k->ch[x]=r;
}
void splay(node *r,node *tar=null){
for (;r->fa!=tar;rotate(r))
if (r->fa->fa!=tar)rotate(r->pl()==r->fa->pl()?r->fa:r);
}
void insert(int x){
if (ROOT==null){
ROOT=new node;
ROOT->d=x;
return;
}node *r=ROOT;
while (1){
int c;
if (x<r->d) c=0;
else c=1;
if (r->ch[c]==null){
r->ch[c]=new node;
r->ch[c]->d=x;
r->ch[c]->fa=r;
splay(r->ch[c]);
return;
}else r=r->ch[c];
}
}
int leftmax(){
node *r=ROOT->ch[0];
while (r->ch[1]!=null) r=r->ch[1];
return r->d;
}
int rightmin(){
node *r=ROOT->ch[1];
while (r->ch[0]!=null) r=r->ch[0];
return r->d;
}
int que(){
int x=inf;
if (ROOT->ch[0]!=null) x=ROOT->d-leftmax();
if (ROOT->ch[1]!=null) x=min(x,rightmin()-ROOT->d);
return x;
}
}
int getint(){char c;int fh=1;while (!isdigit(c=getchar()))if(c=='-')fh=-1;int a=c-'0';while (isdigit(c=getchar()))a=a*10+c-'0';return a*fh;}
int main(){
int n=getint();
Splay::build();
int x=getint();
long long ans=x;
Splay::insert(x);
for (int i=1;i<n;++i){
x=getint();
Splay::insert(x);
ans+=Splay::que();
}printf("%lld\n",ans);
return 0;
}

这样就可以了

【codevs 1296】营业额统计 水~~的更多相关文章

  1. Splay树-Codevs 1296 营业额统计

    Codevs 1296 营业额统计 题目描述 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...

  2. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计(STL,二分)

    CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计(STL,二分) Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一 ...

  3. CodeVS 1296 营业额统计

    1296 营业额统计2002年  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master   题目描述 Description Tiger最近被公司升任为营业部经理, ...

  4. codevs 1296 营业额统计 (splay 点操作)

    题目大意 每次加入一个值,并且询问之前加入的数中与该数相差最小的值. 答案输出所有相差值的总和. 解题分析 = = 参考程序 #include <bits/stdc++.h> using ...

  5. 【wikioi】1296 营业额统计

    题目链接:http://www.wikioi.com/problem/1296/ 算法:Splay 这是非常经典的一道题目,用Splay树来维护营业额,每天的最小波动值就等于 min{树根-树根的前驱 ...

  6. treap 1296 营业额统计

    有一个点答案错误,求大神指教 #include<cstdio>#include<iostream>#include<cstdlib>#include<ctim ...

  7. splay 1296 营业额统计

    有一个点超时,确实是个很简单的splay#include<cstdio> #include<iostream> using namespace std; int n,shu[1 ...

  8. AC日记——营业额统计 1296 codevs

    1296 营业额统计 2002年  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description Tiger ...

  9. AC日记——营业额统计 codevs 1296 (splay版)

    营业额统计 思路: 每次,插入一个点: 然后找前驱后继: 来,上代码: #include <cmath> #include <cstdio> #include <iost ...

随机推荐

  1. SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  2. 链表面试题Java实现【重要】

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. 数据结构Java实现02----线性表与顺序表

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. C# Reflection Type/MethodInfo

    C#反射 在C#的反射中,可以通过Type来执行类中的某个方法,也可以通过MethodInfo来执行方法 三种调用方法 下面的示例中使用了三种方法来执行方法 两个类:Class1和Demo1,通过反射 ...

  5. 三维世界的Gizmos

    Unity和Maya 今天在美术同事那儿了解些Maya常识,加上自己在Unity3D中的一点儿小操作,记录一下Gizmos 之前就知道Maya和Unity3D的轴向是一致的,在同事那儿看他操作Maya ...

  6. C++容器的复制

    C++容器的复制不同于Java Java是引用复制,复制的仅仅是对象的引用, 在需要复制容器内对象的副本集合的情况,需要使用Clone方法,而且要注意clone方法的浅拷贝 深拷贝 C++的容器复制 ...

  7. UIImageJPEGRepresentation和UIImagePNGRepresentation

    UIImageJPEGRepresentation方法在耗时上比较少 而UIImagePNGRepresentation耗时操作时间比较长 -(void)imagePickerController:( ...

  8. form表单和ajax表单提交(Html.BeginForm()、Ajax.BeginForm())的差别

    有如下几种区别: 1. Ajax在提交.请求.接收时,都是异步进行的,网页不需要刷新: Form提交则是新建一个页面,哪怕是提交给自己本身的页面,也是需要刷新的: 2. A在提交时,是在后台新建一个请 ...

  9. Linux Linux程序练习六

    题目:实现一个so库文件名称为listupper.so,so文件中实现一个函数,函数名为void upper(const char *src, char *desc),调用update后将参数src所 ...

  10. C语言 百炼成钢6

    //题目16:输入两个正整数m和n,求其最大公约数和最小公倍数. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include< ...