Pagini recente » Cod sursa (job #2327387) | Cod sursa (job #1325604) | Cod sursa (job #3257185) | Cod sursa (job #156881) | Cod sursa (job #2766161)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int d, dp[100005], t[100005];
int n, v[100005];
int st, dr, md;
void go(int p){
if(t[p] != -1)
go(t[p]);
fout<<v[p]<<" ";
}
int main (){
fin>>n;
for(int i=1; i<=n; i++)
fin>>v[i];
dp[0]=-1;
d=1;
dp[d]=1;
t[dp[d]]=dp[d-1];
for(int i=2; i<=n; i++){
st=1;
dr=d;
while(st <= dr){
md=(st+dr)/2;
if(v[i] > v[dp[md]])
st=md+1;
else
dr=md-1;
}
if(st == d+1)
d++;
dp[st]=i;
t[dp[st]]=dp[st-1];
}
fout<<d<<"\n";
go(dp[d]);
return 0;
}