Pagini recente » Cod sursa (job #1438236) | Cod sursa (job #783216) | Cod sursa (job #1100011) | Cod sursa (job #1845491) | Cod sursa (job #2415978)
#include <fstream>
#include <algorithm>
#include <vector>
const int NMAX=100005;
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int v[NMAX],pref[NMAX];
pair <int,int> dp[NMAX];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
int sol=0;
for(int i=1; i<=n; ++i){
cin>>v[i];
int st=1;
int dr=sol;
int best=0;
while(st<=dr){
int mij=(st+dr)>>1;
if(dp[mij].first<v[i]){
best=mij;
st=mij+1;
}
else
dr=mij-1;
}
++best;
dp[best].first=v[i];
dp[best].second=i;
pref[i]=dp[best-1].second;
sol=max(sol,best);
}
cout<<sol<<'\n';
vector <int> ans;
int curr=dp[sol].second;
while(curr>0){
ans.push_back(v[curr]);
curr=pref[curr];
}
reverse(ans.begin(),ans.end());
for(auto x: ans)
cout<<x<<" ";
cout<<'\n';
return 0;
}