zoukankan      html  css  js  c++  java
  • 【HAOI 2007】 上升序列

    【题目链接】

              点击打开链接

    【算法】

              先预处理 : 将序列反转,求最长下降子序列

              对于每个询问,根据字典序性质,贪心即可

    【代码】

             

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 10010
    
    int i,j,len,n,q,mx,pre,l;
    int a[MAXN],f[MAXN];
    vector<int> res;
    
    template <typename T> inline void read(T &x)  
    {  
        int f = 1; x = 0;  
        char c = getchar();  
        for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }  
        for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';  
        x *= f;   
    }  
    template <typename T> inline void write(T x)  
    {  
        if (x < 0)   
        {  
            putchar('-');  
            x = -x;   
        }     
        if (x > 9) write(x/10);  
        putchar(x%10+'0');  
    }  
    template <typename T> inline void writeln(T x)  
    {  
        write(x);  
        puts("");  
    }  
    
    int main() {
            
            read(n); 
            for (i = 1; i <= n; i++) read(a[i]);
            reverse(a+1,a+n+1);
            for (i = 1; i <= n; i++)
            {
                    f[i] = 1;
                    for (j = i - 1; j >= 1; j--)
                    {
                            if (a[i] < a[j])
                                    f[i] = max(f[i],f[j]+1);
                    }
                    mx = max(mx,f[i]);
            }
            
            read(q);
            while (q--)
            {
                    read(l);
                    if (l > mx) 
                    {
                            puts("Impossible");
                            continue;
                    } else
                    {
                            res.clear();
                            pre = 0;
                            for (i = n; i >= 1; i--)
                            {
                                    if (f[i] >= l && a[i] > pre)
                                    {
                                            res.push_back(a[i]);
                                            l--;
                                            pre = a[i];    
                                    }        
                                    if (!l) break;
                            } 
                            len = res.size();
                            for (i = 0; i < len - 1; i++) 
                            {
                                    write(res[i]);
                                    putchar(' ');
                            }
                            writeln(res[len-1]);
                    } 
            }
            return 0;
        
    }
  • 相关阅读:
    aspnet中存储session的各种方法
    Response.ContentType 详细列表
    常用命令行命令
    关于使用request[this.控件名.Unique]获取控件值的问题
    在Asp.net中动态添加css文件,js文件,控件
    关于.Net中垃圾回收机制的理解:
    简单概念
    天健
    (转)高效调用lua函数
    (转)hlsl函数
  • 原文地址:https://www.cnblogs.com/evenbao/p/9196326.html
Copyright © 2011-2022 走看看