Pagini recente » Cod sursa (job #641923) | Cod sursa (job #1303110) | Cod sursa (job #952223) | Cod sursa (job #629001) | Cod sursa (job #3038388)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int i, j, n, m, poz, st, dr, mid, L, k;
int v[100002], w[100002], t[100002], d[100002];
int main() {
cin>>n;
for(i=1;i<=n;i++){
cin>>v[i];
}
for(i=1;i<=n;i++){
if(v[i]>v[d[L]]){
d[++L]=i;
t[d[L]]=d[L-1];
}
else{
st=1;
dr=L;
while(st<=dr){
mid=(st+dr)/2;
if(v[d[mid]]<v[i])
st=mid+1;
else
dr=mid-1;
}
//dr;
d[dr+1]=i;
t[d[dr+1]]=d[dr];
}
}
cout<<L<<"\n";
poz=d[L];
while(poz){
w[++k]=v[poz];
poz=t[poz];
}
reverse(w+1, w+k+1);
for(i=1;i<=k;i++)
cout<<w[i]<<" ";
}