日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Jobdu] 题目1500:出操队形

發(fā)布時間:2024/1/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Jobdu] 题目1500:出操队形 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述:

在讀高中的時候,每天早上學(xué)校都要組織全校的師生進(jìn)行跑步來鍛煉身體,每當(dāng)出操令吹響時,大家就開始往樓下跑了,然后身高矮的排在隊(duì)伍的前面,身高較高的就要排在隊(duì)尾。突然,有一天出操負(fù)責(zé)人想了一個主意,想要變換一下隊(duì)形,就是當(dāng)大家都從樓上跑下來后,所有的學(xué)生都隨機(jī)地占在一排,然后出操負(fù)責(zé)人從隊(duì)伍中抽取出一部分學(xué)生,使得隊(duì)伍中剩余的學(xué)生的身高從前往后看,是一個先升高后下降的“山峰”形狀。據(jù)說這樣的形狀能夠給大家?guī)砗眠\(yùn),祝愿大家在學(xué)習(xí)的道路上勇攀高峰。(注,山峰只有一邊也符合條件,如1,1、2,2、1均符合條件)

輸入:

輸入可能包含多個測試樣例。
對于每個測試案例,輸入的第一行是一個整數(shù)n(1<=n<=1000000):代表將要輸入的學(xué)生個數(shù)。
輸入的第二行包括n個整數(shù):代表學(xué)生的身高(cm)(身高為不高于200的正整數(shù))。

輸出:

對應(yīng)每個測試案例,輸出需要抽出的最少學(xué)生人數(shù)。

樣例輸入:
6 100 154 167 159 132 105 5 152 152 152 152 152
樣例輸出:
0 4

最長遞增子序列問題的變型,從左找一遍,從右找一遍,再掃描一遍,找出dp1[i] + dp2[i]的最大值。最長遞增子序列可以用二分查找優(yōu)化成O(nlogn)的復(fù)雜度。手寫了個二分找lower_bound的函數(shù),也可以用STL里的。

1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 #include <algorithm> 5 using namespace std; 6 7 int N; 8 vector<int> v; 9 vector<int> dp1, dp2; 10 vector<int> st; 11 12 void binSearch(int target) { 13 if (st.empty() || target > st.back()) { 14 st.push_back(target); 15 } else { 16 int l = 0, r = (int)st.size() - 1, m; 17 while (l <= r) { 18 m = l + ((r - l) >> 1); 19 if (st[m] >= target) r = m - 1; 20 else l = m + 1; 21 } 22 st[l] = target; 23 } 24 } 25 26 void getDP() { 27 st.clear(); 28 for (int i = 0; i < v.size(); ++i) { 29 binSearch(v[i]); 30 dp1[i] = st.size(); 31 } 32 st.clear(); 33 for (int i = (int)v.size() - 1; i >= 0; --i) { 34 binSearch(v[i]); 35 dp2[i] = st.size(); 36 } 37 } 38 39 void solve() { 40 getDP(); 41 int res = 0; 42 for (int i = 0; i < N; ++i) { 43 res = max(res, dp1[i] + dp2[i] - 1); 44 } 45 cout << N - res << endl; 46 } 47 48 int main() { 49 while (scanf("%d", &N) != EOF) { 50 v.resize(N); 51 dp1.resize(N); 52 dp2.resize(N); 53 for (int i = 0; i < N; ++i) scanf("%d", &v[i]); 54 solve(); 55 } 56 return 0; 57 } 58 /************************************************************** 59 Problem: 1500 60 User: hupo250 61 Language: C++ 62 Result: Accepted 63 Time:1050 ms 64 Memory:13244 kb 65 ****************************************************************/

?

轉(zhuǎn)載于:https://www.cnblogs.com/easonliu/p/4461884.html

總結(jié)

以上是生活随笔為你收集整理的[Jobdu] 题目1500:出操队形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。