国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CDOJ 251 導彈攔截 最長遞增子序列

2019-11-08 02:13:42
字體:
來源:轉載
供稿:網友

點擊打開鏈接

就是尋找LIS 并打印出來

dp[i]表示到包括第i個數的前i個的最長遞增的長度

從數列從后往前找就好了 ,如果從前往后,前面的大數會覆蓋掉后面的小數,就不對了

代碼:

#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+10;int a[maxn],dp[maxn],ans[maxn];vector<int> v;int main(){	int t; cin>>t;	while(t--){		int n; cin >> n;		for(int i=1; i<=n; i++)			cin >> a[i];		memset(ans,0x3f,sizeof(ans));		memset(dp,0,sizeof(dp));		v.clear();		int mx = -1;		for(int i=1; i<=n; i++){			int p = lower_bound(ans+1,ans+1+n,a[i])-ans;			ans[p] = a[i];			dp[i] = p;			mx = max(mx,p);		}		cout << mx << endl;		int k = maxn;		for(int i=n; i>=1; i--){			if(dp[i]==mx && a[i]<k){				v.push_back(a[i]);				k = a[i];				mx--;			}		}		// int k = -1,cnt=1;		// for(int i=1; i<=n; i++){ // 不能正序,前面大的數會覆蓋后面小的數 不能達到最長		// 	if(dp[i]==cnt && a[i]>k){		// 		v.push_back(a[i]);		// 		k = a[i];		// 		cnt++;		// 	}		// }		for(int i=v.size()-1; i>=1; i--)			cout << v[i] << " ";		cout << v[0] << endl;	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁陕县| 嘉黎县| 亳州市| 鄯善县| 赣州市| 句容市| 平塘县| 深水埗区| 无锡市| 贡嘎县| 手游| 河北省| 阜平县| 富川| 乌恰县| 青龙| 措美县| 营口市| 前郭尔| 邵阳县| 泸州市| 东宁县| 太康县| 盈江县| 武定县| 通化市| 汨罗市| 新田县| 墨竹工卡县| 巴东县| 景东| 澄迈县| 淮阳县| 扶余县| 聂荣县| 木里| 兴化市| 浮梁县| 漯河市| 贵南县| 商南县|