Mrs. Smith is trying to contact her husband, John Smith, but she forgot the secret phone number!
The only thing Mrs. Smith remembered was that any permutation of n
can be a secret phone number. Only those permutations that minimize secret value might be the phone of her husband.
The sequence of n integers is called a permutation if it contains all integers from 1 to n exactly once.
The secret value of a phone number is defined as the sum of the length of the longest increasing subsequence (LIS) and length of the longest decreasing subsequence (LDS).A subsequence ai1,ai2,…,aik where 1≤i1<i2<…<ik≤n is called increasing if ai1<ai2<ai3<…<aik. If ai1>ai2>ai3>…>aik, a subsequence is called decreasing. An increasing/decreasing subsequence is called longest if it has maximum length among all increasing/decreasing subsequences.
For example, if there is a permutation [6,4,1,7,2,3,5], LIS of this permutation will be [1,2,3,5], so the length of LIS is equal to 4. LDS can be [6,4,1], [6,4,2], or [6,4,3], so the length of LDS is 3
.
Note, the lengths of LIS and LDS can be different.So please help Mrs. Smith to find a permutation that gives a minimum sum of lengths of LIS and LDS.
Input
The only line contains one integer n(1≤n≤105) — the length of permutation that you need to build.
Output
Print a permutation that gives a minimum sum of lengths of LIS and LDS.
If there are multiple answers, print any.
Examples
Input
4
Output
3 4 1 2
Input
2
Output
2 1
Note
In the first sample, you can build a permutation [3,4,1,2]
. LIS is [3,4] (or [1,2]), so the length of LIS is equal to 2. LDS can be ony of [3,1], [4,2], [3,2], or [4,1]. The length of LDS is also equal to 2. The sum is equal to 4. Note that [3,4,1,2]
is not the only permutation that is valid.
In the second sample, you can build a permutation [2,1]
. LIS is [1] (or [2]), so the length of LIS is equal to 1. LDS is [2,1], so the length of LDS is equal to 2. The sum is equal to 3. Note that permutation [1,2] is also valid.
題意:給你一個n,讓你構造一個長度爲n的數列,數列中的值爲1~n的其中一個,並且每個數只能出現一次,使得這個序列的最長遞增子序列的長度+最長遞減子序列的長度最小。讓你輸出這個序列。
解題思路:最佳的方案就是最長遞增子序列的長度和最長遞減子序列的長度都爲sqrt(n),這樣的話 就能滿足題目要求。之後和我們把1~n分別分解爲長度爲sqrt(n)的一些片段,然後先輸出大的片段,然後再輸出小的片段。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
const int maxn=1e5+10;
int n;
int main(){
int i,j;
scanf("%d",&n);
int t=sqrt(n),sum=0,st=n-t;j=n;
while(st>0){
for(i=st+1;i<=st+t;i++){
printf("%d ",i);
}
st-=t;
}
st+=t;
for(i=1;i<=st;i++){
printf("%d%c",i,i==st?'\n':' ');
}
return 0;
}