Pagini recente » Cod sursa (job #2136843) | Cod sursa (job #1100038) | Cod sursa (job #3150900) | Cod sursa (job #3153445) | Cod sursa (job #2288976)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f1("scmax.in");
ofstream f2("scmax.out");
long long v[100005],e[100005];
int n,p[100005],elimit,maxindice;
long long afis[100005];
int cautbin(long long vec[], int vecmin, int vecmax, long long element){
if(element<=vec[vecmax] && element>vec[vecmax-1])
return vecmax;
if(element>vec[vecmax])
return vecmax+1;
int dist=(vecmax-vecmin)/2;
if(element>vec[vecmin+dist])
return cautbin(vec, vecmin+dist, vecmax, element);
else
return cautbin(vec, vecmin, vecmin+dist-1, element);
}
int main() {
f1>>n;
for(int i=0;i<n;i++){
f1>>v[i];
}
elimit=1;
e[0]=v[0];
p[0]=1;
for(int i=1;i<n;i++){
int poz=cautbin(e,0,elimit-1,v[i]);
e[poz]=v[i];
if(poz>elimit-1)
elimit=poz+1;
p[i]=poz+1;
if(p[i]>maxindice)
maxindice=p[i];
}
f2<<maxindice<<endl;
int maxpos=n;
for(int i=maxindice;i>0;i--){
for(int j=maxpos;j>=0;j--){
if(p[j]==i){
maxpos=j;
break;
}
}
afis[i]=v[maxpos];
}
for(int i=1;i<=maxindice;i++){
f2<<afis[i]<<" ";
}
return 0;
}