Pagini recente » Cod sursa (job #1109862) | Cod sursa (job #2265555) | Cod sursa (job #752353) | Cod sursa (job #1229163) | Cod sursa (job #1207256)
#include<fstream>
using namespace std;
int t[100005], i, n, p, u, k, mid, d[100005], v[100005];
ifstream in("scmax.in");
ofstream out("scmax.out");
int drum(int u){
if(u!=0){
drum(t[u]);
out<<v[u]<<" ";
}
}
int main(){
in>>n;
for(i=1; i<=n; i++)
in>>v[i];
k=1;
d[1]=1;
for(i=2; i<=n; i++){
p=1; u=k;
while(p<=u){
mid=p+(u-p)/2;
if(v[d[mid]]>=v[i])
u=mid-1;
else
p=mid+1;
}
if(p>k){
d[++k]=i;
t[i]=d[k-1];
}
else{
if(v[i]<v[d[p]]){
d[p]=i;
t[i]=d[p-1];
}
}
}
out<<k<<"\n";
drum(d[k]);
return 0;
}