`
java-mans
  • 浏览: 11415557 次
文章分类
社区版块
存档分类
最新评论

HNOI2002 营业额统计

 
阅读更多

题目思路:splay,用到了查找树内某结点的前驱,后继和插入操作。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
#include<list>
#include<iostream>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f
#define Max 40000
int max(int a,int b)
{
	return a>b?a:b;
}
int min(int a,int b)
{
	return a<b?a:b;
}
int p[Max],ch[Max][2],val[Max],root,top1;
inline void newnode(int &x,int fa,int data)
{
    x=++top1;
    p[x]=fa,val[x]=data;
    ch[x][0]=ch[x][1]=0;
}
inline void rot(int x,int f)
{
    int y=p[x];
    ch[y][!f]=ch[x][f];
    p[ch[x][f]]=y;
    if(p[y]) ch[p[y]][ch[p[y]][1]==y]=x;
    p[x]=p[y];
    ch[x][f]=y;
    p[y]=x;
}
inline void splay(int x,int goal)
{
    while(p[x]!=goal)
    {
        if(p[p[x]]==goal)
            rot(x,ch[p[x]][0]==x);
        else
        {
            int y=p[x];
            int f=(ch[p[y]][0]==y);
            if(ch[y][f]==x)
            {
                rot(x,!f),rot(x,f);
            }
            else
            {
                rot(y,f),rot(x,f);
            }
        }
    }
    if(goal==0) root=x;
}
inline int pre(int x)
{
    int tmp=ch[x][0];
    if(tmp==0)
    return inf;
    while(ch[tmp][1])
    {
        tmp=ch[tmp][1];
    }
    return val[x]-val[tmp];
}
inline int suc(int x)
{
    int tmp=ch[x][1];
    if(tmp==0)
        return inf;
    while(ch[tmp][0])
        tmp=ch[tmp][0];
    return val[tmp]-val[x];
}
inline int ins(int data)
{
    int x=root;
    while(ch[x][val[x]<data])
    {
        if(val[x]==data)
        {
            splay(x,0);
            return 0;
        }
        x=ch[x][val[x]<data];
    }
    newnode(ch[x][val[x]<data],x,data);
    splay(ch[x][val[x]<data],0);
    return 1;
}
int main()
{
    int n,a,b,ans,i,tmp;
    while(scanf("%d",&n)!=EOF)
    {
        ans=0;
        top1=0;
        for(i=1;i<=n;i++)
        {
            if(scanf("%d",&tmp)==EOF)
            tmp=0;
            if(i==1)
            {
                newnode(root,0,tmp);
                ans+=tmp;continue;
            }
            if(ins(tmp)==0)continue;
            a=pre(root);
            b=suc(root);
            if(a<b)
                ans+=a;
            else
                ans+=b;
        }
        printf("%d\n",ans);
    }
}


分享到:
评论

相关推荐

    全面的动态规划学习资料(内附习题及详细解答)

    奶牛浴场(WC’2002) 80 HPC (WC’2001) 85 交叉匹配 (WC’2001 练习题) 90 CODES (IOI‘99) 93 快乐的蜜月 (CTSC 2000) 102 INTEGER (HNOI 2000) 108 BAR 110 序关系计数问题 (福建试题) 113 CHAIN 116 LAND (IOI...

    HNOI2014题解及数据

    HNOI2014题解及数据,包括标程及试题

    HNOI2014数据+所有程序

    HNOI2014,数据,程序,评测包,省选,NOI,NOIP,各省省选

    HNOI2018训练.rar

    [ZJOI2008]瞭望塔 [ZJOI2008]骑士 [ZJOI2008]树的统计 [HNOI2010]弹飞绵羊(LCT) [HNOI2010]公交线路 [HNOI2010]物品调度 [CQOI2011]动态逆序对 [NOI2011]阿狸的打字机 [NOI2011]兔农 [NOI2011]智能车比赛 [SDOI...

    HNOI2004 高精度开根

    [HNOI2004] 高精度开根代码

    农夫果园实例 葡萄:Grape草莓:Strawberry苹果:Apple

    设计题目:农夫果园 一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果: 葡萄:Grape 草莓:Strawberry 苹果:Apple 水果与其他的植物有很大的不同,水果最终是可以采摘食用的。...

    动态规划试题分析

    奶牛浴场(WC’2002) 80 HPC (WC’2001) 85 交叉匹配 (WC’2001 练习题) 90 CODES (IOI‘99) 93 快乐的蜜月 (CTSC 2000) 102 INTEGER (HNOI 2000) 108 BAR 110 序关系计数问题 (福建试题) 113 CHAIN 116 LAND (IOI...

    Luogu P2278 [HNOI2003]操作系统

    题面 原来是道大水题,但是它的题面有点意思,于是我就手残把它加进了解题计划中。 题面描述 对于操作系统,我们只拥有一个CPU,只能同时处理一个任务。现在有很多任务需要操作系统解决,它们将按照产生时间输入。...

    HNOI模拟 2016.3.31 百步穿杨

    版权声明:都是TATQAQ2333大爷教我的 https://blog.csdn.net/u012076197/article/details/5121

    wangjunrui666#bzoj-problem##2000. [Hnoi2010]stone 取石头游戏1

    然后两个玩家轮流来取石子,每次每个玩家可以取走一堆中的所有石子,但有一个限制条件:一个玩家若要取走一堆石子,则与这堆石子相邻的某堆石子已被取走(之前被某个玩家取

    「AHOI / HNOI2018」毒瘤 (DDP)(链分治)

    LOJLOJLOJ 传送门 题解:首先考虑一棵树怎么做,就是树形 dpdpdp,然后我们可以枚举每一条边怎么选,显然有 3 种情况 进一步发现只需要枚举两种,即强制 uuu 选 vvv 不选,和强制 uuu 不选 vvv 随意 ...

    Windows 2003 域的重命名

    Windows 2003 域的重命名 视频教材

    全面的动态规划资料(原理和题以及解答)

    基本原理和 34个动归题(选自HNOI NOI IOI CTSC等) 有详细的解答

    wsgan001#algorithms-6#第09章_单调性优化1

    第09章 单调性优化9.1 斜率优化主要是针对线性模型,参考博客:HNOI2008 玩具装箱TOY 和【学习笔记】动态规划—斜率优化DP(超详细)+ HDU 3

    动态规划试题分析及常见问题分析

    机器分配(HNOI’95)................................................................................................................. 3 最长不下降序列(HNOI’97).........................................

    蒟蒻の图论刷题(更新中)Ⅰ 树/图dp

    目录[TJOI2017]可乐[ZJOI2006]物流运输[HNOI/AHOI2018]道路[ZJOI2007]时态同步[TJOI2017]城市 [TJOI2017]可乐 tag上是分层图+矩阵优化,但是被我用暴力+滚动数组水过去了(赞美O2!)对每个点有三种状态,0:上一秒...

Global site tag (gtag.js) - Google Analytics