bzoj1046: [HAOI2007]上升序列

真尼玛神坑

m还可以等于0

mgj

 

复制代码
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<algorithm>
 5 #include<iostream>
 6 
 7 using namespace std;
 8 
 9 void setIO(const string& s) {
10     freopen((s + ".in").c_str(), "r", stdin);
11     freopen((s + ".out").c_str(), "w", stdout);
12 }
13 template<typename Q> Q read(Q& x) {
14     static char c, f;
15     for(f = 0; c = getchar(), !isdigit(c); ) if(c == '-') f = 1;
16     for(x = 0; isdigit(c); c = getchar()) x = x * 10 + c - '0';
17     if(f) x = -x;
18     return x;
19 }
20 template<typename Q> Q read() {
21     static Q x; read(x); return x;
22 }
23 
24 const int N = 10000 + 10, INF = ~0u >> 1;
25 int a[N], s[N], f[N];
26 
27 int main() {
28 #ifdef DEBUG
29     freopen("in.txt", "r", stdin);
30     freopen("out.txt", "w", stdout);
31 #endif
32     
33     int n, m; read(n);
34     for(int i = 1; i <= n; i++) read(a[i]), a[i] = -a[i];
35     memset(s, 0x7f, sizeof s); 
36     for(int i = n; i >= 1; i--) {
37         int t = lower_bound(s + 1, s + n + 1, a[i]) - s;
38         f[i] = t;
39         s[t] = a[i];
40     }
41     read(m);
42     while(m--) {
43         int r = read<int>(), last = INF;
44         if(!r) puts("");
45         else {
46             for(int i = 1; r && i <= n; i++) {
47                 if(f[i] >= r && a[i] < last) last = a[i], printf("%d%c", -a[i], (!--r) ? '\n' : ' ');
48             }
49             if(r) puts("Impossible");
50         }
51     }
52     
53     return 0;
54 }
View Code
复制代码

 

posted @   Showson  阅读(242)  评论(1编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示