zoukankan      html  css  js  c++  java
  • bzoj1503郁闷的出(cheng)纳(xu)员

    好痛苦,,,WA了不知道多少遍

    错的服了,,,

    如果某员工的初始工资低于工资下界,他将立刻离开公司

    我也不知道是我语文有问题还是题目有毒,反正这个东西好像不应该算在离开公司的总人数的答案里。。。

    让我一个人静静。。。。

     1 #include <cstdio>
     2 using namespace std;
     3 int son[110001][2],father[110001],size[110001],val[110001],cnt[110001],n,i,now,min,x,y,rt,top,ans,m;
     4 char ch[100];
     5 void newnode(int &x,int fa,int data){
     6     x=++top;
     7     father[x]=fa;
     8     val[x]=data;
     9     size[top]=1;
    10     son[x][0]=son[x][1]=0;
    11 }
    12 void rot(int x,int k){
    13     int y=father[x];
    14     son[y][!k]=son[x][k];
    15     father[son[x][k]]=y;
    16     father[x]=father[y];
    17     son[father[y]][son[father[y]][1]==y]=x;
    18     son[x][k]=y;
    19     father[y]=x;
    20     size[x]=size[y];
    21     size[y]=size[son[y][0]]+size[son[y][1]]+1;
    22 }
    23 void rots(int x,int g){
    24     while((y=father[x])!=g){
    25         if(father[father[x]]==g) rot(x,son[father[x]][0] == x);
    26         else
    27         {
    28             int y=father[x],z=father[y],f=(son[z][0]==y);
    29             if(son[y][f]==x)rot(x,!f);else rot(y,f);
    30             rot(x,f);
    31         }
    32     }
    33     if(!g) rt=x;
    34 }
    35 void ins(int a){
    36     int x=rt;
    37     if (!rt){
    38         rt=++top;val[rt]=a;
    39         son[rt][0]=son[rt][1]=0;
    40         size[rt]=1;
    41     }
    42     else{
    43     while(son[x][val[x]<a]) {size[x]++;x=son[x][val[x]<a];}
    44     size[x]++;
    45     newnode(son[x][val[x]<a],x,a);
    46     rots(son[x][val[x]<a],0);
    47     }
    48 }
    49 void del(int a,int x,int fa){
    50     if (!x)return;
    51     if (val[x]<a){
    52         if (x==rt) rt=son[x][1];
    53         father[son[x][1]]=fa;
    54         son[fa][x==son[fa][1]]=son[x][1];
    55         del(a,son[x][1],fa);
    56         now+=size[son[x][0]]+1;ans+=size[son[x][0]]+1;
    57     }else {del(a,son[x][0],x);}
    58     size[x]=size[x]-now;
    59 }
    60 int find(int k,int x){
    61     if(k<=size[son[x][0]])return find(k,son[x][0]);
    62     if(k==size[son[x][0]]+1)return val[x]-min+m;
    63     return find(k-size[son[x][0]]-1,son[x][1]);
    64 }
    65 int main(){
    66     scanf("%d%d",&n,&m);
    67     for (i=1;i<=n;i++){
    68         scanf("%s%d",&ch,&x);
    69         if (ch[0]=='I')if (x>=m)ins(x-m+min);
    70         if (ch[0]=='A')min-=x;
    71         if (ch[0]=='S'){min+=x;now=0;del(min,rt,0);}
    72         if (ch[0]=='F')if (x>size[rt]) printf("-1
    ");else printf("%d
    ",find(size[rt]-x+1,rt));
    73     }
    74     printf("%d
    ",ans);
    75 }

    被卡题意的感觉爽翻了。。。

  • 相关阅读:
    Java 类和对象12
    Java类和对象11
    java 类和对象10
    Java类和对象9
    Java类和对象8
    Java 类和对象7
    包装与方法
    JAVA链表
    泛型
    多态 接口
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5921218.html
Copyright © 2011-2022 走看看