题意:

已知一个序列a,问能否将a映射到序列b,使得相邻元素之间的大小关系不变(三种),且相邻元素不能相差超过k,且每个元素范围在[L,R]内。如果能,求字典序最小的b。

思路:

可以设b[1]的范围为[L,R],从前往后遍历求出b[2]~b[n]每个元素的上界和下界。如果其中有元素已经没有可以使之前成立的范围了,那么说明无法构造这样的映射。

此时最后一个元素的上下界是正确的,从后往前遍历即可得到正确序列B,但是若要保证字典序最小,则每个元素应该取最小的可行取值(如果开始先从后往前扫求出范围,再从前往后贪心地选最小取值更容易理解,但是反过来也是正确的贪心策略)。

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
int l[maxn],r[maxn],a[maxn];
int ans[maxn];
int main(){
int n,L,R,k;
cin>>n>>L>>R>>k;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
l[1]=L;r[1]=R;
for(int i=2;i<=n;i++){
if(a[i]==a[i-1]){
l[i]=l[i-1];
r[i]=r[i-1];
}
else if(a[i]>a[i-1]){
l[i]=l[i-1]+1;
r[i]=min(r[i-1]+k,R);
}
else if(a[i]<a[i-1]){
l[i]=max(L,l[i-1]-k);
r[i]=r[i-1]-1;
}
if(l[i]>r[i]||r[i]<L||l[i]>R){
printf("-1\n");
return 0;
}
}
ans[n]=l[n];
for(int i=n-1;i>=1;i--){
if(a[i]==a[i+1])
ans[i]=ans[i+1];
else if(a[i]<a[i+1]){
//ans[i+1]-k<=ans[i]<=ans[i+1]-1
//l[i]<=ans[i]<=r[i]
ans[i]=max(ans[i+1]-k,l[i]);
}
else if(a[i]>a[i+1]){
//ans[i+1]+1<=ans[i]<=ans[i+1]+k
//l[i]<=ans[i]<=r[i]
ans[i]=max(ans[i+1]+1,l[i]);
}
}
for(int i=1;i<=n;i++){
printf("%d ",ans[i]);
}
printf("\n");
}

Songwriter CF1252-E(贪心)的更多相关文章

  1. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  2. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 486  Solved: 266[Submit][Sta ...

  7. code vs 1098 均分纸牌(贪心)

    1098 均分纸牌 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解   题目描述 Description 有 N 堆纸牌 ...

  8. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心

    SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...

  9. 【贪心】HDU 1257

    HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...

随机推荐

  1. 网页中<a>标签新窗口和location.href 新窗口打开

    在网页制作过程中,经常遇到新窗口打开,一般是a超级链接或者location.href 新窗口打开形式,下面分别讲述两种之间的不同方式 1,a标签 新窗口 添加属性 target="_blan ...

  2. 用Java语言做ACM的注意事项

    ①用Java时只需要粘贴包里面的内容,包名是不需要的.//有包名的去掉包名 ②提交题目时类名一定要是 Main,否则判题系统是不认识代码的. ③Java的util类里面的Scanner.in里面的 i ...

  3. FFmpeg从入门到出家(HEVC在RTMP中的扩展)

    由金山云视频云技术团队提供:FFmpeg从入门到出家第三季: 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具 ...

  4. Dubbo学习源码总结系列五--集群负载均衡

            Dubbo提供了哪些负载均衡机制?如何实现的?          LoadBalance接口:可以看出,通过SPI机制默认为RandomLoadBalance,生成的适配器类执行sel ...

  5. Maya2017下载安装与激活

    目录 1. 更多推荐 2. 下载地址 2.1. OneDrive 2.2. 百度云 3. 安装激活步骤 1. 更多推荐 其他Maya版本的下载与激活:https://www.cnblogs.com/c ...

  6. 朴素贝叶斯算法——实现新闻分类(Sklearn实现)

    1.朴素贝叶斯实现新闻分类的步骤 (1)提供文本文件,即数据集下载 (2)准备数据 将数据集划分为训练集和测试集:使用jieba模块进行分词,词频统计,停用词过滤,文本特征提取,将文本数据向量化 停用 ...

  7. 330-基于FMC接口的Kintex-7 XC7K325T PCIeX8 3U PXIe接口卡 光纤PCIe卡

    一.板卡概述      本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8.64bit D ...

  8. vue.js 笔记

    <!-- 多层for循环 --> <ul> <li v-for="(ite,key) in list2"> {{key}}-------{{it ...

  9. linux7 grub配置文件 linux6 grub配置文件

    在 grub 的 kernel 配置后面,添加 acpi_pad.disable=1 重启机器之后,开机就不会自动加载 acpi_pad 模块 一:linux6 [root@node2 ~]# cat ...

  10. lvm分区创建和扩容

    shell> fdisk /dev/xvdb #### 选择磁盘 Command (m for help): m #### 帮助 Command action a toggle a bootab ...