• treap 1286郁闷的出纳员.cpp


    #include<cstdio>
    #include<cstdlib>
    #include<ctime>
    struct shu
    {
     int l,r,sum,zhi,dui;
    }a[100005];
    int n,xia,root,size,lei,leave;
    char ch[2];
    void you(int &a1)
    {
     int t=a[a1].l;
     a[a1].l=a[t].r;
     a[t].r=a1;
     a[t].sum=a[a1].sum;
     a[a1].sum=a[a[a1].l].sum+a[a[a1].r].sum+1;
     a1=t;
     return;
    }
    void zuo(int &a1)
    {
     int t=a[a1].r;
     a[a1].r=a[t].l;
     a[t].l=a1;
     a[t].sum=a[a1].sum;
     a[a1].sum=a[a[a1].l].sum+a[a[a1].r].sum+1;
     a1=t;
     return;
    }
    void jia(int &a1,int a2)
    {
     if(a1==0)
       {
        size++;
        a1=size;
        a[a1].sum=1;
        a[a1].zhi=a2;
        a[a1].dui=rand();
        return;
       }
     a[a1].sum++;
     if(a2<a[a1].zhi)
       {
        jia(a[a1].l,a2);
        if(a[a[a1].l].dui<a[a1].dui)
          you(a1);
       }
     else
       {
        jia(a[a1].r,a2);
        if(a[a[a1].r].dui<a[a1].dui)
          zuo(a1);
       }
     return;
    }
    int shan(int &a1,int a2)
    {
     if(a1==0)
       return 0;
     int t;
     if(a[a1].zhi<a2)
       {
        t=a[a[a1].l].sum+1;
        a1=a[a1].r;
        return t+shan(a1,a2);
       }
     t=shan(a[a1].l,a2);
     a[a1].sum-=t;
     return t;
    }
    int zhao(int a1,int a2)
    {
     if(a[a[a1].r].sum+1==a2)
       return a[a1].zhi;
     if(a[a[a1].r].sum>=a2)
       return zhao(a[a1].r,a2);
     else
       return zhao(a[a1].l,a2-a[a[a1].r].sum-1);
    }
    int main()
    {
     root=size=0;
     srand(time(0));
     scanf("%d%d",&n,&xia);
     for(int i=0;i<n;i++)
       {
        int a1;
        scanf("%s%d",ch,&a1);
        if(ch[0]=='I')
          if(a1>=xia)
            jia(root,a1-lei);
        if(ch[0]=='A')
          lei+=a1;
        if(ch[0]=='S')
          {
           lei-=a1;
           leave+=shan(root,xia-lei);
       }
      if(ch[0]=='F')
        {
         if(a1>a[root].sum)
           printf("-1 ");
         else
           printf("%d ",zhao(root,a1)+lei);
        }
       }
     printf("%d ",leave);
     return 0;
    }

  • 相关阅读:
    java基础之 javac编译单个文件并执行 带jar包
    java 按照字符数分解字符串
    转载 模糊查询map中的key
    public final static PrintStream out = null; 的实例化猜想
    从0开始搭个网站在云上 思路引导
    java 泛型操作
    git 命令行
    React Native 安卓添加阴影
    react native 按钮的那些事
    mac 下 react Native android环境搭建
  • 原文地址:https://www.cnblogs.com/xydddd/p/5130847.html
Copyright © 2020-2023  润新知