Pagini recente » Cod sursa (job #1756706) | Cod sursa (job #742362) | Cod sursa (job #1720662) | Cod sursa (job #911343) | Cod sursa (job #2975462)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int LMAX = 100005;
int v[LMAX],m[LMAX],l[LMAX],rez[LMAX],a[LMAX];
int main()
{
int N,i,j,k,st,dr,mid,sol;
fin >> N;
for(i=1;i<=N;i++)
fin >> v[i];
m[1] = 1; l[1] = 1; k = 1;
for(i=2;i<=N;i++){
st = 1; dr = k; sol = 0;
while(st<=dr){
mid = (st+dr)/2;
if(v[i]>v[l[mid]]){
sol = mid;
st = mid+1;
}
else
dr = mid-1;
}
if(sol == k){
l[++k] = i;
m[i] = k;
rez[i] = l[k-1];
}
else{
sol++;
m[i] = sol;
l[sol] = i;
rez[i] = l[sol-1];
}
}
fout << k << '\n';
j = l[k];
for(i=k;i>0;i--){
a[i] = v[j];
j = rez[j];
}
for(i=1;i<=k;i++)
fout << a[i] << " ";
return 0;
}