Pagini recente » Cod sursa (job #271528) | Cod sursa (job #778531) | Cod sursa (job #663375) | Cod sursa (job #824246) | Cod sursa (job #1196883)
#include<fstream>
using namespace std;
int n, v[100009], mij, p, u, i, k, t[100009], d[100009];
ifstream in("scmax.in");
ofstream out("scmax.out");
void drum(int x){
if(x!=0){
drum(t[x]);
out<<v[x]<<" ";
}
}
int main(){
in>>n;
in>>v[1];
k=1;
d[1]=1;
for(i=2; i<=n; i++){
in>>v[i];
p=1; u=k;
while(p<=u){
mij=p+(u-p)/2;
if(v[d[mij]]>=v[i])
u=mij-1;
else
p=mij+1;
}
if(p>k){
d[++k]=i;
t[i]=d[p-1];
}
else
if(v[i]<v[d[p]]){
d[p]=i;
t[i]=d[p-1];
}
}
out<<k<<"\n";
drum(d[k]);
return 0;
}