• 【CF1017C】The Phone Number(构造)


    题意:要求构造一个1-n的排列,使得它的LIS+LDS最小

    n<=1e5

    思路:一个百度之星时候从LYY处听来的结论:1-n随机排列的LIS期望是根号级别的

    考虑将LIS与LDS都构造成根号级别

    分块,块内增(减),块间减(增)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<string>
     4 #include<cmath>
     5 #include<iostream>
     6 #include<algorithm>
     7 #include<map>
     8 #include<set>
     9 #include<queue>
    10 #include<vector>
    11 using namespace std;
    12 typedef long long ll;
    13 typedef unsigned int uint;
    14 typedef unsigned long long ull;
    15 typedef pair<int,int> PII;
    16 typedef vector<int> VI;
    17 #define fi first
    18 #define se second 
    19 #define MP make_pair
    20 #define N   110000
    21 #define MOD 1000000007
    22 #define eps 1e-8 
    23 #define pi acos(-1)
    24 
    25 int a[N];
    26 
    27 int read()
    28 { 
    29    int v=0,f=1;
    30    char c=getchar();
    31    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
    32    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
    33    return v*f;
    34 }
    35 
    36 void swap(int &x,int &y)
    37 {
    38     int t=x;x=y;y=t;
    39 }
    40 
    41 
    42 int main()
    43 {
    44     //freopen("1.in","r",stdin);
    45     //freopen("1.out","w",stdout);
    46     int n;
    47     scanf("%d",&n);
    48     int block=sqrt(n);
    49     int m=n/block;
    50     int now=n;
    51     int s=0;
    52     int st=n-block+1;
    53     for(int i=1;i<=m;i++)
    54     {
    55         for(int j=1;j<=block;j++) a[++s]=st++;
    56         st=st-2*block;
    57     }
    58     if(n%block)
    59     {
    60         st=1;
    61         for(int i=1;i<=n%block;i++) a[++s]=st++;
    62     }
    63         
    64     for(int i=1;i<=n;i++) printf("%d ",a[i]); 
    65     return 0;
    66 }
  • 相关阅读:
    文件夹打开对话框
    文件打开对话框
    HOOK函数(二)——全局HOOK
    HOOK函数(一)——进程内HOOK
    抓包
    List 访问
    坑爹的EL 表达式。
    tomcat 虚拟目录的安全问题
    框架
    程序员相关词汇
  • 原文地址:https://www.cnblogs.com/myx12345/p/9843078.html
Copyright © 2020-2023  润新知