zoukankan      html  css  js  c++  java
  • 1588: [HNOI2002]营业额统计

    splay第一道题,没什么感想。

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<algorithm>
      4 using namespace std;
      5 const int maxn=1000010;
      6 int pre[maxn],ch[maxn][2],key[maxn];
      7 int root,tot;
      8 void newnode(int &r,int fa,int k)
      9 {
     10     r=++tot;
     11     pre[r]=fa;
     12     key[r]=k;
     13     ch[r][1]=ch[r][0]=0;
     14 }
     15 void initi()
     16 {
     17     root=tot=0;
     18 }
     19 void rotate(int x,int k)
     20 {
     21     int y=pre[x];
     22     ch[y][!k]=ch[x][k];
     23     pre[ch[x][k]]=y;
     24     if(pre[y])
     25         ch[pre[y]][ch[pre[y]][1]==y]=x;
     26     pre[x]=pre[y];
     27     ch[x][k]=y;
     28     pre[y]=x;
     29 }
     30 void splay(int r,int goal)
     31 {
     32     while(pre[r]!=goal)
     33     {
     34        if(pre[pre[r]]==goal)
     35             rotate(r,ch[pre[r]][0]==r);
     36         else
     37         {
     38             int y=pre[r];
     39             int k=ch[pre[y]][0]==y;
     40             if(ch[y][k]==r)
     41             {
     42                 rotate(r,!k);
     43                 rotate(r,k);
     44             }
     45             else
     46             {
     47                 rotate(y,k);
     48                 rotate(r,k);
     49             }
     50         }
     51     }
     52     if(goal==0) root=r;
     53 }
     54 void insert(int k)
     55 {
     56     int r=root;
     57     if(r==0)
     58     {
     59         newnode(root,0,k);
     60         return ;
     61     }
     62     while(ch[r][key[r]<k])
     63         r=ch[r][key[r]<k];
     64     newnode(ch[r][key[r]<k],r,k);
     65     splay(ch[r][key[r]<k],0);
     66 }
     67 int Getpre(int r)
     68 {
     69     if(ch[r][0]==0) return -1;
     70     r=ch[r][0];
     71     while(ch[r][1]) r=ch[r][1];
     72     return key[r];
     73 }
     74 int Getsuf(int r)
     75 {
     76     if(ch[r][1]==0) return -1;
     77     r=ch[r][1];
     78     while(ch[r][0]) r=ch[r][0];
     79     return key[r];
     80 }
     81 int main()
     82 {
     83     int n;
     84     while(scanf("%d",&n)==1)
     85     {
     86         initi();
     87         int x;
     88         int ans=0;
     89         while(n--)
     90         {
     91             if(scanf("%d",&x)==EOF) x=0;
     92             insert(x);
     93             int a=Getpre(root);
     94             int b=Getsuf(root);
     95             if(a!=-1&&b!=-1)
     96                 ans+=min(x-a,b-x);
     97             else if(a!=-1&&b==-1)
     98                 ans+=x-a;
     99             else if(a==-1&&b!=-1)
    100                 ans+=b-x;
    101             else
    102                 ans+=x;
    103         }
    104         printf("%d
    ",ans);
    105     }
    106 }
  • 相关阅读:
    2021.4.11(每周总结)
    2021.4.9
    2021.4.8
    2021.4.7
    k8s集群安装(一)安装方案介绍
    k8s映射外部服务Endpoints
    Linux服务器配置上网代理squid
    SonarQube学习笔记
    yum安装指定版本mysql
    linux目录没有颜色的处理
  • 原文地址:https://www.cnblogs.com/sooflow/p/3410630.html
Copyright © 2011-2022 走看看