Summer Reading

Time Limit: 20 Sec  Memory Limit: 512 MB

Description

  

Input

  

Output

  

Sample Input

  7
  0 1 0 0 0 3 0

Sample Output

  3
  1 1 2 2 3 3 3

HINT

  

Solution

  

Code

  1. #include<iostream>
  2. #include<string>
  3. #include<algorithm>
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<cstdlib>
  7. #include<cmath>
  8. #include<vector>
  9. using namespace std;
  10. typedef long long s64;
  11.  
  12. const int ONE = ;
  13. const int MOD = 1e9 + ;
  14.  
  15. int n;
  16. int a[ONE];
  17. int vis[ONE], ans[ONE];
  18.  
  19. struct power
  20. {
  21. int val, times;
  22. friend bool operator <(power a, power b)
  23. {
  24. if(a.val != b.val) return a.val < b.val;
  25. return a.times < b.times;
  26. }
  27. }low[ONE], up[ONE];
  28.  
  29. int get()
  30. {
  31. int res;char c;
  32. while( (c=getchar())< || c> );
  33. res=c-;
  34. while( (c=getchar())>= && c<= )
  35. res=res*+c-;
  36. return res;
  37. }
  38.  
  39. void Deal_first()
  40. {
  41. low[] = up[] = (power){, };
  42. for(int i = ; i <= n; i++)
  43. {
  44. low[i] = low[i - ], up[i] = up[i - ];
  45.  
  46. if(++low[i].times > ) low[i] = (power){low[i].val + , };
  47. if(++up[i].times > ) up[i] = (power){up[i].val + , };
  48.  
  49. if(a[i] != )
  50. {
  51. if(low[i].val > a[i] || up[i].val < a[i])
  52. {
  53. printf("-1");
  54. exit();
  55. }
  56. low[i] = max(low[i], (power){a[i], });
  57. up[i] = min(up[i], (power){a[i], });
  58. }
  59.  
  60. if(low[i].val > up[i].val) {printf("-1"); exit();}
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. n = get();
  67. for(int i = ; i <= n; i++)
  68. a[i] = get();
  69. if(a[] > ) {printf("-1"); exit();}
  70. Deal_first();
  71.  
  72. int val = up[n].val - (up[n].times == );
  73. if(low[n].val > val) {printf("-1"); exit();}
  74. for(int i = n; i >= ; i--)
  75. {
  76. val = min(val, up[i].val);
  77. val -= vis[val] == ;
  78. ans[i] = val, vis[val]++;
  79. }
  80.  
  81. if(ans[] <= ) {printf("-1"); exit();}
  82.  
  83. printf("%d\n", ans[n]);
  84. for(int i = ; i <= n; i++)
  85. printf("%d ", ans[i]);
  86.  
  87. }

【Codeforces370E】Summer Reading [构造]的更多相关文章

  1. Java多线程之构造与发布

    资料来源 http://www.ibm.com/developerworks/library/j-jtp0618/ http://www.javaspecialists.eu/archive/Issu ...

  2. 对于fmri的设计矩阵构造的一个很直观的解释-by 西南大学xulei教授

    本程序意在解释这样几个问题:完整版代码在本文的最后. 1.实验的设计如何转换成设计矩阵? 2.设计矩阵的每列表示一个刺激条件,如何确定它们? 3.如何根据设计矩阵和每个体素的信号求得该体素对刺激的敏感 ...

  3. 一步一步制作yaffs/yaffs2根文件系统(二)---安装BusyBox,构造/bin、/sbin、/usr、linuxr

    开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...

  4. 麻省理工18年春软件构造课程阅读02“Java基础”

    本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材 ...

  5. Linux3.10.0块IO子系统流程(4)-- 为请求构造SCSI命令

    首先来看scsi_prep_fn int scsi_prep_fn(struct request_queue *q, struct request *req) { struct scsi_device ...

  6. Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter(补充版)

    几个星期前,我阅读过一篇文章,一位老师教导自己的学生要积极地去阅读文学文献,其中,我很欣赏他的一句话:“Just think of liturature as if you're reading a ...

  7. Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter

    几个星期前,我阅读过一篇文章,一位老师教导自己的学生要积极地去阅读文学文献,其中,我很欣赏他的一句话:“Just think of liturature as if you're reading a ...

  8. Linux内核分析第三周——构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...

  9. C#异步编程(五)异步的同步构造

    异步的同步构造 任何使用了内核模式的线程同步构造,我都不是特别喜欢.因为所有这些基元都会阻塞一个线程的运行.创建线程的代价很大.创建了不用,这于情于理说不通. 创建了reader-writer锁的情况 ...

随机推荐

  1. 【转载】【翻译】Breaking things is easy///机器学习中安全与隐私问题(对抗性攻击)

    原文:Breaking things is easy 译文:机器学习中安全与隐私问题(对抗性攻击) 我是通过Infaraway的那篇博文才发现cleverhans-blog的博客的,这是一个很有意思的 ...

  2. iOS-cocoapods使用方法

    1.CocoaPods的安装及使用: http://code4app.com/article/cocoapods-install-usage http://objccn.io/issue-6-4/ h ...

  3. grid++json页面数据传入

    最近遇到一个问题,就是要用Grid++做页面数据报表打印,但是翻了Grid++文档就是没有直接从页面上传数据的,都是要加载txt文档,填写txt文档的url.自己尝试直接页面上传JSON数据到Grid ...

  4. 再看RCU

    从昨天晚上开始,我就立志要把RCU拿下,昨晚加今天早上看了RCU的东西,太细节的原理我就不扣了,放弃,知道RCU是怎么用的就可以了,赶紧看文件系统中dcache的管理了. 说说RCU,RCU其实是很简 ...

  5. Delphi中正常窗口的实现

    摘要: 在Delphi的VCL库中,为了使用以及实现的方便,应用对象Application创建了一个用来处理消息响应的隐藏窗口.而正是这个窗口,使得用VCL开发出来的程序存在着与其他窗口不能正常排列平 ...

  6. BZOJ 1875 HH去散步(矩阵快速幂)

    题意: 给定一张无向图,每条路的长度都是1,没有自环,可能有重边,给定起点与终点,求从起点走t步到达终点的方案数. 每一步走的时候要求不能走上一条刚刚走的路. 解析: 显然需要搞出个矩阵之后矩乘. 然 ...

  7. hdu5575 Discover Water Tank

    题意: 给出个水箱,水箱两侧有无限高的隔板,水箱内有整数高度的隔板将水箱分成n-1份,现在给出m个限制,每个限制表示某个位置的某个高度有水或没水,问最多能同时满足多少个限制.n,m<=2*10^ ...

  8. 虚拟机如何设置U盘启动项

    开始配置虚拟机时选"自定义"不要选"典型",在“SCSI设配器”选LSI logic ,(不是默认的那个):然后其他正常默认创建,虚拟机建好后,再添加U盘为虚拟 ...

  9. 【题解】SCOI2008配对

    贪心+dp~观察数据,发现一个规律:将数字排序之后,最优匹配只可能产生在该数字和与它距离不超过二的数字之间. 所以可以用dp[i]代表前i个数(排序)匹配的最小差值,之后暴力选出该新数应该如何匹配. ...

  10. BZOJ4553:[HEOI2016/TJOI2016]序列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4553 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某 ...