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