当前位置: 首页 > news >正文

23ccpc(最长上升子序列题解)

你原本有一个 1 到 n 的排列但是不慎地你遗忘了它但是你记得以 第i个位置 结尾的最长上升子序 列的长度数组 an 现在希望你能够构造一个符合条件的排列 p 如果不存在符合上述条件的排列 p 则输出 −1。 这里定义以 第i位置 结尾的最长上升子序列的长度为符合以下条件的整数数组 id 中 k 的最大值。

1 ≤ id1 < id2 < id3 < · · · < idk = i pid1 < pid2 < pid3 < · · · < pidk 本题输入输出量比较大请选手注意。

Input 第一行一个整数 n (1 ≤ n ≤ 106) 第二行 n 个整数表示数组 an (1 ≤ ai ≤ n)其中 ai 表示以 i 结尾的最长上升子序列的长度。

Output 一行 n 个整数表示排列 p ,如果无解则输出 −1。

思路:

首先判断有没有符合的子序列,可以发现如果第a[i]为k,说明前边一定有子序列长度达到k-1,我们可以记录前i个a的最大值,如果a[i]>k+1,那么就没有这样的子序列。

如果有,有相同长度的子序列,如果j>i,那么p[j]<p[i],然后根据子序列长度我们可以将1-n分成几份,然后根据序列长度,我让长的子序列拥有更大的值;

举个例子:

5

1 2 2 3 3

长度为3的子序列有两个,长度为2的子序列有两个,长度为1的子序列有1个。

我让3对应的位置上值为5,4(从大到小)

2对应的位置上值为3,2

1对应位置上值为1

整个序列为:

1 3 2 5 4

我们可以事先求出相同序列长度对应的最大值,然后从前往后遍历,输出一种序列在当前位置的值后,让值-1,接着往后遍历即可。

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<unordered_map>
#include<map>
using namespace std;
typedef long long LL;
#define per(i,a,b) for(int i=a;i<=b;i++)
#define ber(i,a,b) for(int i=a;i>=b;i--)
const int N = 1e6 + 100;
int  a[N],cn[N],ans[N],p[N];
int n;
int main()
{

    cin >> n;
    per(i, 1, n)
    {
        scanf("%d", &a[i]);
        cn[a[i]]++;
    }
    int flag = 0, cnt = 0;
    per(i, 1, n)
    {
        if (a[i] > cnt + 1)
        {
            flag = 1;
            break;
        }
        else if (a[i] == cnt + 1)
            cnt++;
    }
    if (flag)
    {
        cout << -1 << endl;
        return 0;
    }
     cnt =n;
    ber(i, n, 1)
    {
        if (cn[i])
        {
            p[i] = cnt;
            cnt = cnt - cn[i];
        }
    }
    per(i, 1, n)
    {
        ans[i] = p[a[i]];
        p[a[i]]--;
    }
    for (int i = 1; i <= n-1; i++)
        printf("%d ", ans[i]);
    printf("%d\n", ans[n]);
    return 0;
}

相关文章:

23ccpc(最长上升子序列题解)

你原本有一个 1 到 n 的排列但是不慎地你遗忘了它但是你记得以 第i个位置 结尾的最长上升子序 列的长度数组 an 现在希望你能够构造一个符合条件的排列 p 如果不存在符合上述条件的排列 p 则输出 −1。 这里定义以 第i位置 结尾的最长上升子序列的长度为符合…...

BUUCTF easycap 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压得到一个.pcap文件。 密文&#xff1a; 解题思路&#xff1a; 1、这道题和它的名字一样&#xff0c;真的很easy。双击easycap.pcap文件&#xff0c;打开Wireshark。在Wireshark中&#xf…...

[LeetCode]-160. 相交链表-141. 环形链表-142.环形链表II-138.随机链表的复制

目录 160.相交链表 题目 思路 代码 141.环形链表 题目 思路 代码 142.环形链表II 题目 思路 代码 160.相交链表 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 题目 给你两个…...

聊一聊关于手机Charge IC的电流流向

关于手机Charge&#xff0c;小白在以前的文章很少讲&#xff0c;一是这部分东西太多&#xff0c;过于复杂。二是总感觉写起来欠缺点什么。但后来想一想&#xff0c;本是抱着互相学习来写文章的心理态度&#xff0c;还是决定尝试写一些。 关于今天要讲的关于手机Charge的内容&a…...

【k8s】pod调度——亲和,反亲和,污点,容忍

官方网址&#xff1a;https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ 一、亲和性 &#xff08;1&#xff09;节点亲和性 pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution&#xff1a;软策略 p开头 ●requiredDuri…...

分享者 - 携程旅游创作者搬砖项目图文教程

大家好&#xff01;携程这个出行旅游平台相信大家都不陌生吧。 每天都有大量的旅客在里面浏览攻略&#xff0c;寻找灵感和旅游建议。 那么&#xff0c;我们的项目就是把一些优质的小红书平台上的旅游攻略或作品&#xff0c;经过处理后搬运到携程平台上发布。 这个项目如何操作呢…...

vite配置.env环境变量文件,开发环境,测试环境,预发布环境,生产环境

在vue2&#xff0c;用的vue-cli脚手架搭建项目&#xff0c;cli用的是webpack 当你yarn dev时&#xff0c;命令会启动package.json中的dev键名的值&#xff0c;也就是后面的一行命令 这时浏览器会去识别你是开发环境还是生产环境&#xff0c;其实windows是不能直接识别你是开发…...

0003Java安卓程序设计-springboot基于Android的学习生活交流APP

文章目录 **摘** **要**目 录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合&#xff0c;利用java技术建设学习生活交流APP&…...

Java8 时间字符串校验是否为对应的日期格式

时间字符串格式校验 严格模式下校验日期字符串 public static boolean isDateStrict(String dateStr, String pattern) {try {DateTimeFormatter formatter new DateTimeFormatterBuilder().appendPattern("yyyyMMdd").parseDefaulting(ChronoField.ERA, 1).toFor…...

2023.11.6联赛总结

T 1 T1 T1让你构造出一个不超过 40 ∗ 40 40*40 40∗40的矩阵&#xff0c;满足连续的 r y x ryx ryx有 n n n个。 一开始我想着直接放 r y x ryx ryx&#xff0c;这个做法有 80 80 80分&#xff0c;但是打挂了&#xff0c;再调了将近1个小时后&#xff0c;选择先跳过&#xff…...

UE5——源码阅读——9——引擎预初始化

加载项目模块 判断项目是否是有意义的 准备读取模块 对应着错误信息 广播 加载插件模块 根据配置是否已经启用插件 开始遍历所有的插件 尝试读取插件 检查上一次完成的加载阶段是否大于当前的加载阶段 通知加载完成...

报错Could not resolve placeholder ‘driver‘ in value “${driver}“

这是我的报错&#xff1a; 原因是我的applicationContext.xml文件加载properties文件径错误&#xff1a; 应该把路径改成这样就可以了&#xff1a;...

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据&#xff0c;而不仅仅是栈上的数据&#xff0c;可以使用一个叫做 clone 的通用函数。 看下面的代码…...

高防CDN:企业网络安全的坚强后盾

随着互联网的快速发展&#xff0c;企业的网络面临着越来越多的安全威胁。在这种背景下&#xff0c;高防CDN&#xff08;Content Delivery Network&#xff09;已经成为了企业网络安全的坚强后盾。本文将理性分析高防CDN对于企业发展的影响&#xff0c;强调其在维护网络稳定性、…...

gitlab 设置 分支只读

一&#xff0c;设置master分支只读&#xff0c; 并且只有Maintainers 拥有合并权限。 二&#xff0c;设置成员权限 改为developer 三&#xff0c;邀请成员 点击右上角 Invite Members...

Spring Boot 面试题——常用注解

目录 Spring Bean将一个类声明为 Bean自动装配 Bean声明 Bean 的作用域 前端后传值处理常见的 HTTP 请求类型读取配置文件定时任务全局 Controller 层异常处理 Spring Bean 将一个类声明为 Bean Component&#xff1a;通用的注解&#xff0c;可标注任意类为 Spring 组件。如果…...

RabbitMQ(高级特性) 设置队列所有消息存活时间

RabbitMQ可以设置消息的存活时间&#xff08;Time To Live&#xff0c;简称TTL&#xff09;&#xff0c;当消息到达存活时间后还没有被消费&#xff0c;会被移出队列。RabbitMQ可以对队列的所有消息设置存活时间&#xff0c;也可以对某条消息设置存活时间。 Configuration pub…...

刷题学习记录

[MRCTF2020]PYWebsite1 进入环境&#xff0c;页面就提示要购买flag&#xff0c;不要想着购买&#xff0c;因为扫码后提示的是一个文本 “拜托&#xff01;你不会真的想PYflag吧&#xff0c;这样可是违规的&#xff01;再好好分析一下界面代码吧” 查看网页源码&#xff0c;发现…...

WPF中依赖属性及附加属性的概念及用法

完全来源于十月的寒流&#xff0c;感谢大佬讲解 依赖属性 由依赖属性提供的属性功能 与字段支持的属性不同&#xff0c;依赖属性扩展了属性的功能。 通常&#xff0c;添加的功能表示或支持以下功能之一&#xff1a; 资源数据绑定样式动画元数据重写属性值继承WPF 设计器集成 …...

Golang爬虫封装

引言 爬虫是一种自动化地从网页中提取信息的程序&#xff0c;它在现代互联网的数据获取和分析中扮演着重要的角色。Golang作为一门强大的编程语言&#xff0c;也提供了丰富的工具和库来实现爬虫功能。在本文中&#xff0c;我们将探讨如何使用Golang来封装一个灵活、高效的爬虫…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...