题意:给1e5的数组a 保证 ai <= ai+1  ai<=i

   求一个一样长的数组b 使得mex(b1,b2···bi) = ai

QAQ:不知道为啥这1600分的题比赛时出不了 啊啊啊啊啊啊啊啊

题解:其实比赛的时候 就知道当前bi填的数字肯定是0,1,2...a[i] - 1中第一个没出现的数字

   如果已经被填满了 就在a[i] + 1...a[n]-1中填第一个后面没出现的数字

   因为显然有一个限制 你当前填的数字 不能等于后面的某一个a[i]

   比赛的时候一直想一些奇奇怪怪的实现方法.. 越整越麻烦

   显然bi要填满的数字就是0-a[n]-1

   把数字分成两组 一组是a[i]中出现的 一组是没出现的 分别维护指针

   如果a[i] > 第一组的数字 就填第二组的 ... 都填完了就选inf

   填完再判断一下合法性

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string.h>
#include <queue>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int MAXN = 1e5 + 5; int val[100015];
int a[MAXN];
int b[MAXN];
int c[MAXN];
int d[MAXN];
int main() {
int cn1 = 0, cn2 = 0;
int n;
cin>>n;
for(int i = 1; i <= n; i++) scanf("%d", &a[i]), val[a[i]]++; for(int i = 0; i < a[n]; i++)
if(!val[i]) d[++cn2] = i;
else c[++cn1] = i; int nl = 1, nr = 1;
for(int i = 1; i <= n; i++) {
if(nl <= cn1 && a[i] > c[nl]) b[i] = c[nl++];
else if(nr <= cn2) b[i] = d[nr++];
else b[i] = n + 5;
} memset(val, 0, sizeof(val));
int now = -1;
for(int i = 1; i <= n; i++) {
val[b[i]] = 1;
while(val[now + 1]) now += 1;
if(now + 1 != a[i]) {
puts("-1");
return 0;
}
}
for(int i = 1; i <= n; i++) printf("%d ", b[i]); puts("");
return 0;
}

  

最新文章

  1. python中列表,元组,字符串互相转换
  2. sqoop的使用
  3. Android怎么使用字体图标 自定义FontTextView字体图标控件-- 使用方法
  4. 戴文的Linux内核专题:06配置内核(2)
  5. Crawling is going on - Alpha版本使用说明
  6. Java中的哈希
  7. 内联汇编和JMP到内联函数注意事项
  8. delphi高手突破之异常及错误处理
  9. list集合为空或为null的区别
  10. 【BZOJ3224】【tyvj1728】普通平衡树
  11. 自定义shell终端提示符及颜色即修改 PS1文件 (以Centos为例)
  12. Xamarin Essentials教程设备信息DeviceInfo
  13. [转]MyEclipse8.5破解方法
  14. HDU1285 确定比赛问题【拓扑排序+优先队列】
  15. POJ 2487
  16. POJ 1459&amp;&amp;3436
  17. tomcat报错catalina.sh: line 401: /usr/java/jdk1.7.52/bin/java: No such file or directory
  18. Android TabHost的使用 顶部选项卡
  19. BASE_DIR 拼接文件路径
  20. SQL进阶语法的多表操作

热门文章

  1. 解放双手,markdown文章神器,Typora+PicGo+七牛云图床实现自动上传图片
  2. 笔记:学习go语言的网络基础库,并尝试搭一个简易Web框架
  3. 【MyBatis】MyBatis CRUD
  4. C++ 异常机制(上)
  5. memcached+magent的集群部署详细过程
  6. 3610:20140827:161308.483 No active checks on server: host [192.168.1.10] not found
  7. --safe-user-create
  8. Upload - Labs (下)
  9. C# url的编码解码,xml和json的序列化和反序列化
  10. 查看Java的汇编指令