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

吉林省级建设行政主管部门政务网站大学做网站是什么专业

吉林省级建设行政主管部门政务网站,大学做网站是什么专业,网站建设网络推广书生,公司小程序开发你原本有一个 1 到 n 的排列但是不慎地你遗忘了它但是你记得以 第i个位置 结尾的最长上升子序 列的长度数组 an 现在希望你能够构造一个符合条件的排列 p 如果不存在符合上述条件的排列 p 则输出 −1。 这里定义以 第i位置 结尾的最长上升子序列的长度为符合…

你原本有一个 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;
}

http://www.yayakq.cn/news/21652/

相关文章:

  • 合肥市做网站的公司有哪些网站建设的功能有哪些内容
  • 做网站买好域名怎么办网站建设的优缺点
  • 国内 上市网站建设公司排名重庆市建设工程质量信息网
  • 企业门户网站特征用手机下载地图到内全卡
  • 网站右下角弹出广告代码seo链接提交入口
  • 上海交通网站建设专门做折扣的网站有哪些
  • 上海网站建设托管淘宝返利网站怎么做
  • wordpress网站防护什么是一学一做视频网站
  • 如何做企业网站php西安网站建站
  • 网站程序上传教程怎么形容网站做的好
  • 微信网站制作北京小程序源码怎么运行
  • 12380举报网站建设经验页面设计软件有哪些
  • 做网站赚钱的QQ群常熟网站建设哪家好
  • 网站服务器错误怎么办软件开发平台是指什么
  • 北京响应式网站建设报价网站建设地图素材
  • 中太建设集团网站网上做衣服的网站有哪些
  • 网站下载免费新版上海新闻频道
  • 柳州网站制作做网站 营业执照
  • 网站做支付端口的费用做网站每年交服务费
  • 我有域名和云服务器怎么做网站哪些网站是用twcms做的
  • 泰州网站制作公司湖北公众号开发
  • 龙海市城乡规划建设局网站中国石油大学网页设计与网站建设
  • 网站安全建设需求分析报告北京康迪建设监理咨询有限公司网站6
  • 东莞微信网站建设报价请科技公司做网站需要注意什么
  • 网站新闻列表页设计广西建设网桂建云官网
  • 设计学校网站模板免费下载公司介绍ppt
  • 赣州城乡建设局网站杭州网站建设外包
  • 杭州滨江网站建设公司免费的短视频软件app下载
  • 网站所有页面只显示域名山东做网站建设公司排名
  • 网站开发是指北京网站的网站建设公司