UVALive 7595

明天集训结束......!

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
map<int,int> flag;
int n,x;
int main()
{  int ceng=1,sum=0;//深度,点的数量
    scanf("%d",&n);
     while(n--)
     {
       scanf("%d",&x);
        if(x<ceng)//小于这个深度不行,已经被占用
        {
          printf("No\n");
          continue;
        }
         printf("Yes\n");
        while(x>=0&&flag[x])//两点合成它们上面的点
        {
             flag[x]=0;
             sum--;//点的数量减少一个
             x--;
        }
       sum++;
       flag[x]=1;//标记找到的最上面的点
        if(ceng<5e5+10)
        {
             while(flag[ceng])
                ceng++;//更新深度
        }
         ceng=min(ceng,sum);//如果点在ceng的下面有的话,取ceng,否则就取点
       if(!x) ceng=1e9+100;//全部占满,则都不再成立
     }
    return 0;
}

 

posted on 2017-08-31 21:48  发牌员  阅读(102)  评论(0)    收藏  举报

导航