首页 > 其他分享 >Link with Monotonic Subsequence(构造)

Link with Monotonic Subsequence(构造)

时间:2022-08-23 16:22:53浏览次数:82  
标签:int scanf Monotonic 构造 lds Subsequence Link printf include

题意

定义lis为最长上升子序列,lds为最长下降子序列。

构造一个排列\(p\),使得\(\max (lis(p), lds(p))\)最小。

题目链接:https://ac.nowcoder.com/acm/contest/33187/G

数据范围

\(1 \leq n \leq 10^6\)

思路

最小值为\(\lceil \sqrt n \rceil\)。

只需要构造形如\(3, 2, 1, 6, 5, 4, 9, 8, 7\)的排列即可。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

int main()
{
    int T;
    scanf("%d", &T);
    while(T --) {
        int n;
        scanf("%d", &n);
        int B = ceil(sqrt(n));
        for(int l = 1; l <= n; l ++) {
            int r = min(n, l + B - 1);
            for(int i = r; i >= l; i --) {
                printf("%d ", i);
            }
            l = r;
        }
        printf("\n");
    }
    return 0;
}

标签:int,scanf,Monotonic,构造,lds,Subsequence,Link,printf,include
From: https://www.cnblogs.com/miraclepbc/p/16616690.html

相关文章