题目链接:点击查看

题目大意:给出一个长度为 n 的序列 a ,现在需要构造出一个长度为 n 的序列 b ,满足相邻的 i 和 i + 1 下,a[ i ] 和 a[ i + 1 ] 的大小关系应该和 b[ i ] 和 b[ i + 1 ] 的大小关系相同,且相邻的 abs( b[ i ] - b[ i + 1 ] ) <= k ,且任意的 b[ i ] 都属于 [ L , R ] 之间

题目分析:因为最后的答案需要输出字典序最小,所以我们可以设 [ L , R ] 为最后一个位置的可行范围,然后倒着递推每个位置的可行范围,最后求出第一个位置的可行范围就是其可行解了,在递推可行范围的时候,注意需要同时满足以下三个条件:

  1. l[ i ] >= r[ i ]
  2. l[ i ] >= L
  3. r[ i ] <= R

然后从第一个位置向后贪心取最小的位置就可以了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;int a[N],l[N],r[N];int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n,L,R,k;scanf("%d%d%d%d",&n,&L,&R,&k);for(int i=1;i<=n;i++)scanf("%d",a+i);auto check=[&](){l[n]=L,r[n]=R;for(int i=n-1;i>=1;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]=max(L,l[i+1]-k);r[i]=r[i+1]-1;}else if(a[i]>a[i+1]){l[i]=l[i+1]+1;r[i]=min(R,r[i+1]+k);}if(l[i]>r[i]||l[i]<L||r[i]>R)return false;}return true;};if(!check())return 0*puts("-1");int ans=l[1];for(int i=1;i<=n;i++){printf("%d ",ans);if(a[i]==a[i+1])continue;else if(a[i]>a[i+1])ans=max(ans-k,l[i+1]);else if(a[i]<a[i+1])ans=max(ans+1,l[i+1]);}puts("");return 0;
}

CodeForces - 1252E Songwriter(贪心)相关推荐

  1. Codeforces1600数学day5[找规律CodeForces - 1059C,贪心数学A - Banh-mi CodeForces - 1062C ]

    A - Banh-mi CodeForces - 1062C 题目大意:就是开始给你一个01序列,和q次询问,每次询问会给你一个区间,每次你会从这个区间内拿出一个数,在区间内的其他未被拿走的数字会加上 ...

  2. CodeForces - 1494D Dogeforces(贪心+构造)

    题目链接:点击查看 题目大意:给出 nnn 个叶子结点和一个 n∗nn*nn∗n 的 LCALCALCA 矩阵,其中 LCALCALCA 表示的是最近公共祖先节点的权值,现在需要构造出一棵自顶向下权值 ...

  3. Codeforces 1203E Boxers(贪心)

    题目链接:https://codeforces.com/problemset/problem/1203/E 题意:给定n个数字,每个数字可以进行一次+1或是-1的变换(也可以不变),问通过对部分数字适 ...

  4. codeforces数学1600day4[贪心数学公式推导CodeForces - 1151D ,思维CodeForces - 1085C,数论同余+组合计数 CodeForces - 1056B]

    A - Stas and the Queue at the Buffet CodeForces - 1151D 题目大意:就是给你n个人在排队,每个人都有一个ai值和bi值,每个人的不满意度就是f(i ...

  5. Codeforces 1093C (思维+贪心)

    题面 传送门 题目大意: 有一个长n(n为偶数)的序列a 已知a满足 \(a_1≤a_2≤⋯≤a_n\) 给出一个长度为\(\frac{n}{2}\) 的序列b,定义\(b_i=a_i+a_{n-i+ ...

  6. codeforces#236_div2_A nuts 贪心

    题目地址:cf#236_div2_A 题目大意: 给你四个数 k,a,b,v;      k代表每个隔间最多不能超过的数目  ,a是果子个数,b是有多少隔板数量,v是一个隔板最多能装多少 现在问你,要 ...

  7. CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)

    题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai​⊕aj​,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...

  8. CodeForces - 1369E DeadLee(贪心+拓扑)

    题目链接:点击查看 题目大意:Lee的厨房中有 n 道菜,每道菜的数量为 w[ i ] ,现在 Lee 会邀请 m 个朋友,每个朋友都有最爱吃的两道菜 x[ i ] 和 y[ i ] ,当朋友 i 来 ...

  9. CodeForces - 1287C Garland(贪心)

    题目链接:点击查看 题目大意:原本有一个1~n的排列,现在缺少了一些数字,用0来代替,现在要求将缺少的数字重新填回去,要求代价和最少,规定代价为:若相邻两个数字的奇偶性不同,则代价为1,否则代价为0 ...

最新文章

  1. 无线路由器与无线AP的区别
  2. 小冰负责人李笛:微软不缺钱,缺对未来的把握
  3. 31全志r58平台Android4.4.2下打开USB摄像头
  4. 数据挖掘导论读书笔记9聚类分析
  5. SEO日暮途穷?做好几点实现华丽蜕变
  6. DatabaseMetaData.getIndexInfo
  7. OPA 23 - Mock server
  8. win10无法检验服务器出示的ssl证书,win10系统网站启用ssL安全证书的操作方法
  9. python创建变量revenue、并赋值为98765_第七章:Python之数据库编程
  10. led数字字体_技术丨体育场馆LED显示屏设计与安装要求
  11. DirectSound学习笔记(2):创建设备对象
  12. 《Supervised Descent Method and its Applications to Face Alignment》阅读笔记
  13. 手机可用熵_时间之矢,生命之熵
  14. Android开发笔记(一百四十五)仿应用宝的垃圾清理动画
  15. Vim 配置详解_wuyang
  16. 向量的数量积,向量积,混合积及应用
  17. Unity给模型添加逼真效果材质
  18. 推荐几个在线处理文件、图片、音视频的工具,免费又好用!
  19. ASF 董事会是如何炼成的?
  20. 倒序存放数组java_java 将一个数组逆序输出的方法

热门文章

  1. java jtable应用源码_JTable的应用(一)
  2. 无悔入华夏怎么一直显示服务器,无悔入华夏完整版
  3. 解决ssh7.4升级8.5后环境变量失效和无法登录问题
  4. 传统登录实现方式问题思考
  5. Nginx负载均衡状态之backup
  6. Java高并发系统的限流策略
  7. ConcurrentHashMap的源码分析-扩容过程图解
  8. SpringAOP概念
  9. 资源权限操作-添加资源权限
  10. 什么是RESTful