洛谷2215 HNOI2007 上公升序列

2021-08-08 06:22:38 字數 1152 閱讀 2878

對於乙個給定的s=,若有p=,滿足(x1輸入輸出格式

輸入格式:

第一行乙個n,表示序列一共有n個元素第二行n個數,為a1,a2,…,an第三行乙個m,表示詢問次數。下面接m行每行乙個數l,表示要詢問長度為l的上公升序列。

輸出格式:

對於每個詢問,如果對應的序列存在,則輸出,否則列印impossible.

輸入輸出樣例

輸入樣例#1:

6

3 4 1 2 3 636

45

輸出樣例#1:

impossible

1 2 3 6

impossible

資料範圍  n<=10000  m<=1000

題解

由於資料範圍是10000,所以n^2的求lis不行了,可以用樹狀陣列優化,但這題有m次詢問,所以和以前的樹狀陣列求lis不同,這次f[i]表示以i為開頭的lis長度(由於是字典序最小(標號)),發現樹狀陣列不能求了,因為這次求的是比它大的max,用了乙個小技巧,把樹狀陣列倒過來,i這個數的位置變成了n-i+1,這樣大的數就到了前面,而小的數到了後面,這樣就可以求字首max了(非常巧妙)。

#include#include#include#includeusing namespace std;

const int maxn=10010;

int n,m,k,a[maxn],b[maxn],c[maxn],ans[maxn],num;

int t[maxn],f[maxn];

int lowbit(int x)

void add(int x,int y)

int find(int x)

int main()

sort(b+1,b+n+1);

num=unique(b+1,b+n+1)-b-1;

for(int i=1;i<=n;i++)

/* for(int i=1;i<=n;i++)

cout<=1;i--)

scanf("%d",&m);

for(int i=1;i<=m;i++)

else

}printf("\n");

} }return 0;

}

洛谷 P3188 HNOI2007 夢幻島寶珠

題目描述 給你n顆寶石,每顆寶石都有重量和價值。要你從這些寶石中選取一些寶石,保證總重量不超過w,且總價值最大為 並輸出最大的總價值。資料範圍 n 100 w 2 30 並且保證每顆寶石的重量符合a 2 b a 10 b 30 輸入格式 輸入檔案中包含多組資料。每組資料的格式如下 第一行是兩個正整數...

洛谷 P3188 HNOI2007 夢幻島寶珠

給你n顆寶石,每顆寶石都有重量和價值。要你從這些寶石中選取一些寶石,保證總重量不超過w,且總價值最大為 並輸出最大的總價值。資料範圍 n 100 w 2 30,並且保證每顆寶石的重量符合a 2 b a 10 b 30 輸入檔案中包含多組資料。每組資料的格式如下 第一行是兩個正整數n和w,1 n 10...

洛谷 P2007 魔方

常神牛從來沒接觸過魔方,所以他要借助計算機來玩。即使是這樣,他還是很菜。常神牛家的魔方都是3 3 3的三階魔方,大家都見過。更正 3 4以圖為準。作為一名菜鳥,常神牛從網上搜了一篇攻略,並找人翻譯成了他自己會做的方法。現在告訴你他的魔方情況,以及他從網上搜到的攻略,請你求出最後魔方變成什麼樣子。輸入...