Restoration of the Permutation

来源:互联网 发布:原油ela数据 编辑:程序博客网 时间:2024/04/28 17:34

Restoration of the Permutation

1000ms
262144KB
This problem will be judged on CodeForces. Original ID:67B
64-bit integer IO format: %I64d      Java class name:(Any)
PrevSubmit Status Statistics Discuss Next
Font Size:

Let A = {a1, a2, ..., an} be any permutation of the firstn natural numbers {1, 2, ..., n}. You are given a positive integerk and another sequence B = {b1, b2, ..., bn}, wherebi is the number of elementsaj inA to the left of the element at = i such thataj ≥ (i + k).

For example, if n = 5, a possible A is {5, 1, 4, 2, 3}. For k = 2, B is given by {1, 2, 1, 0, 0}. But if k = 3, thenB = {1, 1, 0, 0, 0}.

For two sequences X = {x1, x2, ..., xn} andY = {y1, y2, ..., yn}, leti-th elements be the first elements such thatxi ≠ yi. Ifxi < yi, thenX is lexicographically smaller than Y, while if xi > yi, thenX is lexicographically greater than Y.

Given n, k andB, you need to determine the lexicographically smallestA.

Input

The first line contains two space separated integers n andk (1 ≤ n ≤ 1000,1 ≤ k ≤ n). On the second line aren integers specifying the values of B = {b1, b2, ..., bn}.

Output

Print on a single line n integers of A = {a1, a2, ..., an} such thatA is lexicographically minimal. It is guaranteed that the solution exists.

Sample Input

Input
5 21 2 1 0 0
Output
4 1 5 2 3 
Input
4 21 0 0 0
Output
2 3 1 4 
#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using namespace std;int main(){    int n,k;    int i,j,t;    int a[1010],b[1010];    while(cin>>n>>k)    {        for(i=1;i<=n;i++)        {            cin>>a[i];        }        for(i=1;i<=n;i++)        {            j=1;            while(a[j]!=0)            {                j++;            }            b[i]=j;            a[j]--;            for(t=1;t+k<=j;t++)            {                a[t]--;            }        }        for(i=1;i<n;i++)        {            cout<<b[i]<<' ';        }        cout<<b[n]<<endl;    }    return 0;}


原创粉丝点击