有一个点超时,确实是个很简单的splay
#include<cstdio>
#include<iostream>
using namespace std;
int n,shu[1000006][2],root,size,b1,b2,sum1,sum[1000005],zhi[1000005];
int fa[1000005];
void xuan(int a1)
{
int a2,a3,l,r;
a2=fa[a1];
a3=fa[a2];
if(a2==root)
root=a1;
else
if(a2==shu[a3][0])
shu[a3][0]=a1;
else
shu[a3][1]=a1;
if(shu[a2][0]==a1)
l=0;
else
l=1;
r=l^1;
fa[a1]=a3;
fa[a2]=a1;
shu[a2][l]=shu[a1][r];
shu[a1][r]=a2;
fa[shu[a2][l]]=a2;
return;
}
void zhuan(int a1)
{
int a2,a3;
for(;a1!=root;)
{
a2=fa[a1];
a3=fa[a2];
if(a2!=root)
if(a2==shu[a3][0]^a1==shu[a2][0])
xuan(a1);
else
xuan(a2);
xuan(a1);
}
}
void jia(int &a1,int a2,int a3)
{
if(a1==0)
{
size++;
a1=size;
zhi[a1]=a2;
sum[a1]=1;
fa[a1]=a3;
zhuan(a1);
return;
}
if(zhi[a1]==a2)
sum[a1]++;
else
if(zhi[a1]<a2)
jia(shu[a1][1],a2,a1);
else
jia(shu[a1][0],a2,a1);
return;
}
void qian(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]==a2)
b1=a2;
else
if(zhi[a1]<a2)
{
b1=zhi[a1];
qian(shu[a1][1],a2);
}
else
qian(shu[a1][0],a2);
return;
}
void hou(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]==a2)
b2=a2;
else
if(zhi[a1]>a2)
{
b2=zhi[a1];
hou(shu[a1][0],a2);
}
else
hou(shu[a1][1],a2);
return;
}
int main()
{
scanf("%d",&n);
scanf("%d",&sum1);
jia(root,sum1,0);
for(int i=1;i<n;i++)
{
int a1;
scanf("%d",&a1);
b1=-1;
b2=-1;
qian(root,a1);
hou(root,a1);
if(b1==-1)
sum1+=b2-a1;
else
if(b2==-1)
sum1+=a1-b1;
else
if(a1-b1<=b2-a1)
sum1+=a1-b1;
else
sum1+=b2-a1;
jia(root,a1,0);
}
printf("%d",sum1);
return 0;
}

splay 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. AC日记——营业额统计 1296 codevs

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

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

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

  9. NOI 2002 营业额统计 (splay or fhq treap)

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

随机推荐

  1. Golang的安装与环境配置(包括Go lint、Go imports、Go fmt)

    Golang安装 下载地址:https://studygolang.com/dl Go语言中文网 下载后安装,win10系统中会自动配置大部分设置,linux系统请参照网上教程 GO环境变量配置: $ ...

  2. go http简单的表单处理

    //表单处理 package main import (     "net/http"     "io"     "fmt"     &qu ...

  3. go String接口方法

    该接口经常用于输出 struct 的值 或者记录struct数据日志 一个普遍存在的接口是 fmt 包中定义的 Stringer接口 发现 http://tour.studygolang.com/me ...

  4. Shiro授权及注解式开发

    目的: shiro授权 shiro注解式开发 Shiro授权 首先设计shiro权限表: 从图中我们也清晰的看出五张表之间的关系 ShiroUserMapper Set<String> g ...

  5. java中对List中的元素进行排序

    Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 N ...

  6. Java 之 字符输入流[Reader]

    一.字符输入流 java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中. 它定义了字符输入流的基本共性功能方法. public void close() :关 ...

  7. Java 之 字节输出流[OutputStream]

    一.字节输出流 java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地. 该类中定义了字节输出流的基本共性功能方法. 公性方法: public v ...

  8. Redis for C#

    ServiceStack.Redis 初识Redis时接触到的.Net-Redis组件是 ServiceStack.Redis,其V3系列的最新版本是:ServiceStack.Redis.3.9.2 ...

  9. C#-FileHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. Manjaro安装mysql-5.7折腾小记

    安装前准备: 现在Arch官方源是MariaDB,所以得从mysql官网下载,地址:https://www.mysql.com/downloads/ 选择一个合适的版本下载: 下载下来先将压缩文件解压 ...