题意:让你对[0,255]这个序列任意划分成一些不重叠的子段,每个子段的大小不超过K。给你n个不超过255的数,让你将每个数替换成它所在子段的任意一个元素,使得最终这个n个数的序列的字典序最小。

p[x]代表x作为代表元素的话,其所控制的区间的最后一个元素是谁。

读入一个数a的时候,在[0,255]数轴上找它前面的离它最近的一个已被标记的数b,如果与其的距离不超过K,则a的代表元素就是b,然后将p[b]更新成max(p[b],a)。

如果b与a的距离比K还大,就把控制a的元素记为c=max(a-K+1,p[b]+1),因为我们不能涉及b已经控制的区间。然后把p[c]更新为a。

#include<cstdio>
#include<algorithm>
using namespace std;
int n,K,p[256];
bool b[256];
int main(){
int x,t,tt;
scanf("%d%d",&n,&K);
for(int i=1;i<=n;++i){
scanf("%d",&x);
t=-1;
for(int j=x;j>=0;--j){
if(b[j]){
t=j;
break;
}
}
if(t==-1){
if(x>=K){
b[x-K+1]=1;
p[x-K+1]=x;
printf("%d%c",x-K+1,i==n ? '\n' : ' ');
}
else{
b[0]=1;
p[0]=x;
printf("0%c",i==n ? '\n' : ' ');
}
}
else if(t+K-1<x){
tt=max(x-K+1,p[t]+1);
b[tt]=1;
p[tt]=x;
printf("%d%c",tt,i==n ? '\n' : ' ');
}
else{
p[t]=max(p[t],x);
printf("%d%c",t,i==n ? '\n' : ' ');
}
}
return 0;
}

最新文章

  1. NGUI 学习笔记
  2. 编译 wxWidgets-3.0.2 on Mac OS X Yosemite 出错?!的解决方法
  3. mysql 异步执行 query //@todo
  4. &quot;琳琅满屋&quot;调查问卷 心得体会及结果分析
  5. Nginx实现内参:为什么架构很重要?
  6. python 获取当前调用函数名等log信息
  7. 国产CPU研究单位及现状
  8. The Maximum Number of Strong Kings
  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(43)-工作流设计-字段分类设计
  10. 使用PHP-Barcode轻松生成条形码(一)
  11. C语言初学 计算二元一次方程的问题
  12. MFC控件(9):network address control
  13. mysql 增加时间字段
  14. P3373 线段树模板
  15. C/C++ 下的void main()
  16. 最完整的PS快捷键大全(绝对经典)
  17. JavaScript從剪切板中獲取圖片並在光標處插入
  18. 1001.A+B Format (20)的感受
  19. apache并发测试工具ab为什么测不准
  20. (转)在 CentOS7 上安装 MongoDB

热门文章

  1. Sort Colors I &amp; II
  2. IOS使用命令行打包
  3. POJ 1141 Brackets Sequence(括号匹配二)
  4. php单双引号嵌套解决方案
  5. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
  6. android拾遗——Android Intent详解
  7. Storm(二)CentOS7.5搭建Storm1.2.2集群
  8. CSharp中的?.运算符
  9. 【POJ】4007.Flood-it!
  10. RabbitMQ路由类型