当前位置: 代码迷 >> 综合 >> P1020 导弹拦截 洛谷
  详细解决方案

P1020 导弹拦截 洛谷

热度:35   发布时间:2024-01-19 07:44:59.0

 思路:第一问求  最长不升子序列 ,第二问求 最长上升子序列

#include <bits/stdc++.h>
#include <map>
using namespace std;
typedef long long ll;
map<ll,ll> mp;
ll a[100100],n,ans1[100100],ans2[100100];
ll len1,len2;
queue<ll> q;
int main()
{int i=0,n,m;while(cin>>a[++i]);n=m=i-1;len1=len2=1;ans1[1]=ans2[1]=a[1];for(int i=2;i<=n;i++){if(a[i]<=ans1[len1])ans1[++len1]=a[i];else{int pos=upper_bound(ans1+1,ans1+len1+1,a[i],greater<int>())-ans1;ans1[pos]=a[i];}if(a[i]>ans2[len2])ans2[++len2]=a[i];else{int pos=lower_bound(ans2+1,ans2+len2+1,a[i])-ans2;ans2[pos]=a[i];}}cout<<len1<<endl<<len2<<endl;return 0;
}

 

  相关解决方案