Pagini recente » Cod sursa (job #2453821) | Cod sursa (job #9634) | Cod sursa (job #3274718) | Cod sursa (job #1638880) | Cod sursa (job #2422239)
#include <bits/stdc++.h>
#define NM 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int lgm,v[NM],t[NM],dp[NM];
int CB(int x)
{ int st=1,dr=lgm,sol=0;
while(st<=dr)
{ int mij=(st+dr)/2;
if(t[mij]<x)
{ st=mij+1;
sol=max(sol,mij);
}
else dr=mij-1;
}
return sol;
}
int main()
{ int n;
f>>n;
for(int i=1; i<=n; i++) f>>v[i];
dp[1]=lgm=1;
t[1]=v[1];
for(int i=2; i<=n; i++)
{ int poz=CB(v[i]);
if(poz==lgm) lgm++;
dp[i]=poz+1;
t[poz+1]=v[i];
}
int poz=0;
for(int i=1; i<=n; i++)
if(dp[i]>dp[poz]) poz=i;
g<<dp[poz]<<'\n';
vector <int> sol;
for(int i=1,j=1; j<=dp[poz]; i++)
if(dp[i]==j) sol.push_back(v[i]),j++;
for(int i=0; i<sol.size(); i++) g<<sol[i]<<' ';
return 0;
}