zoukankan      html  css  js  c++  java
  • 逆序数还原(FZU)

    逆序数还原
    Accept: 244 Submit: 451
    Time Limit: 1000 mSec Memory Limit : 32768 KB
    Problem Description

    有一段时间Eric对逆序数充满了兴趣,于是他开始求解许多数列的逆序数(对于由1…n构成的一种排列数组a,逆序数即为满足ij,ai>aj的数字对数),但是某天他发现自己遗失了原来的数列,只留下之前计算过程中留下的各个数字对应的逆序数,现在请你帮他还原出原序列。
    Input

    数据有多组,请处理到文件结尾。

    每组数据第一行为一个整数N(1<=N<=1000),表示该序列的数字个数。

    第二行为N个整数,第i个数字表示排在ai之后比ai小的数字个数。
    Output

    输出为一行N个整数,表示原数列。
    Sample Input
    5
    2 0 1 0 0
    Sample Output
    3 1 4 2 5
    用vector实现

    #include <set>
    #include <map>
    #include <list>
    #include <stack>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <string>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define PI cos(-1.0)
    #define RR freopen("input.txt","r",stdin)
    
    using namespace std;
    
    typedef long long LL;
    
    const int MAX = 1e5;
    
    int n;
    int a[1100];
    
    int main()
    {
        int data;
        while(~scanf("%d",&n))
        {
            vector<int>Q;
            vector<int>::iterator it;
            for(int i=1;i<=n;i++)
            {
                Q.push_back(i);
            }
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&data);
                a[i]=Q[data];
                it=Q.begin()+data;
                Q.erase(it);
            }
            for(int i=1;i<=n;i++)
            {
                if(i!=1)
                {
                    printf(" ");
                }
                printf("%d",a[i]);
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业07
    C语言I博客作业03
    oracle 创建用户并指定表空间
    Oracle 给用户赋予dblink权限,创建dblink
    IDEA 2020.2 破解、激活
    nginx 里的常用变量
    nginx 跨域问题解决
    elasticsearch (一)
    kubenetes 安装部署
  • 原文地址:https://www.cnblogs.com/juechen/p/5255947.html
Copyright © 2011-2022 走看看