【贪心】Codeforces Round #480 (Div. 2) C. Posterized
2024-08-29 17:18:11
题意:让你对[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;
}
最新文章
- NGUI 学习笔记
- 编译 wxWidgets-3.0.2 on Mac OS X Yosemite 出错?!的解决方法
- mysql 异步执行 query //@todo
- ";琳琅满屋";调查问卷 心得体会及结果分析
- Nginx实现内参:为什么架构很重要?
- python 获取当前调用函数名等log信息
- 国产CPU研究单位及现状
- The Maximum Number of Strong Kings
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(43)-工作流设计-字段分类设计
- 使用PHP-Barcode轻松生成条形码(一)
- C语言初学 计算二元一次方程的问题
- MFC控件(9):network address control
- mysql 增加时间字段
- P3373 线段树模板
- C/C++ 下的void main()
- 最完整的PS快捷键大全(绝对经典)
- JavaScript從剪切板中獲取圖片並在光標處插入
- 1001.A+B Format (20)的感受
- apache并发测试工具ab为什么测不准
- (转)在 CentOS7 上安装 MongoDB
热门文章
- Sort Colors I &; II
- IOS使用命令行打包
- POJ 1141 Brackets Sequence(括号匹配二)
- php单双引号嵌套解决方案
- Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
- android拾遗——Android Intent详解
- Storm(二)CentOS7.5搭建Storm1.2.2集群
- CSharp中的?.运算符
- 【POJ】4007.Flood-it!
- RabbitMQ路由类型