国产探花免费观看_亚洲丰满少妇自慰呻吟_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;	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三江| 定远县| 太和县| 腾冲县| 巴里| 大连市| 酉阳| 斗六市| 克东县| 六安市| 遂溪县| 马山县| 台前县| 廊坊市| 富川| 沅江市| 会同县| 永福县| 绥中县| 岳普湖县| 澄江县| 临沂市| 东城区| 普宁市| 新闻| 桂阳县| 栾川县| 尚义县| 霍林郭勒市| 光泽县| 安化县| 双鸭山市| 都昌县| 郸城县| 佛冈县| 井研县| 阳新县| 察哈| 滦南县| 绥化市| 浙江省|