zoukankan      html  css  js  c++  java
  • bzoj1046[HAOI2007]上升序列

    1046[HAOI2007]上升序列 

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 5497  Solved: 1915
    [Submit][Status][Discuss]

    Description

      对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ax
    2 < … < axm)。那么就称P为S的一个上升序列。如果有多个P满足条件,那么我们想求字典序最小的那个。任务给
    出S序列,给出若干询问。对于第i个询问,求出长度为Li的上升序列,如有多个,求出字典序最小的那个(即首先
    x1最小,如果不唯一,再看x2最小……),如果不存在长度为Li的上升序列,则打印Impossible.

    Input

      第一行一个N,表示序列一共有N个元素第二行N个数,为a1,a2,…,an 第三行一个M,表示询问次数。下面接M
    行每行一个数L,表示要询问长度为L的上升序列。N<=10000,M<=1000

    Output

      对于每个询问,如果对应的序列存在,则输出,否则打印Impossible.

    Sample Input

    6
    3 4 1 2 3 6
    3
    6
    4
    5

    Sample Output

    Impossible
    1 2 3 6
    Impossible
     

    哇读错题太辣鸡啦!
    要求的是位置的字典序最小而不是构成的序列字典序最小,,跪

    反向一个下降子序列然后贪心就ok啦,水题一个

     1 #include<bits/stdc++.h>
     2 #define N 10005
     3 using namespace std;
     4 int n,m,len,a[N],b[N],f[N];
     5 int find(int x){
     6     int l=1,r=len,ans=0;
     7     while(l<=r){
     8         int mid=(l+r)>>1;
     9         if(b[mid]>x)l=(ans=mid)+1;
    10         else r=mid-1;
    11     }
    12     return ans;
    13 }
    14 
    15 void solve(int x){
    16     int pre=-0x3f3f3f3f;
    17     for(int i=1;i<=n;i++)
    18     if(a[i]>pre&&f[i]>=x){
    19         printf("%d",a[i]);x--;
    20         if(x)putchar(' ');
    21         else break;pre=a[i];
    22     }
    23     putchar('
    ');
    24 }
    25 
    26 int main(){
    27     scanf("%d",&n);memset(b,0xc0,sizeof(b));
    28     for(int i=1;i<=n;i++)
    29     scanf("%d",&a[i]);
    30     for(int i=n;i>=1;i--){
    31         int p=find(a[i]);
    32         b[p+1]=max(b[p+1],a[i]);
    33         len=max(len,f[i]=p+1);
    34     }
    35     scanf("%d",&m);
    36     while(m--){
    37         int x;
    38         scanf("%d",&x);
    39         if(x>len)puts("Impossible");
    40         else solve(x);
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    高德地图之 鼠标移进移出时 图标的改变
    高德地图之--海外地图
    angular表单验证
    angularJs 页面加载页面
    angularJs tab样式切换方法之一
    资源
    JavaScript规范
    H5 用 iScroll实现上拉加载 下拉刷新的功能
    ionic项目之极光推送--通知
    Day6 function
  • 原文地址:https://www.cnblogs.com/wsy01/p/8324584.html
Copyright © 2011-2022 走看看