Pagini recente » Cod sursa (job #318356) | Cod sursa (job #493311) | Cod sursa (job #178615) | Cod sursa (job #1727241) | Cod sursa (job #1266213)
#include<fstream>
using namespace std;
int t[100007], n, p, sol, solp, i, nr, j, u, mij, v[100007], maxim, w[100007];
ifstream in("scmax.in");
ofstream out("scmax.out");
void afisare(int x){
if(x!=0){
afisare(t[x]);
out<<v[x]<<" ";
}
}
int main(){
in>>n;
for(i=1; i<=n; i++)
in>>v[i];
w[1]=1;
nr=1;
for(i=2; i<=n; i++){
if(v[i]>v[w[nr]]){
w[++nr]=i;
t[i]=w[nr-1];
}
else{
p=1; u=nr;
while(p<=u){
mij=p+(u-p)/2;
if(v[i]>v[w[mij]])
p=mij+1;
else
u=mij-1;
}
if(v[i]>v[w[p-1]]){
w[p]=i;
t[i]=w[p-1];
}
}
}
out<<nr<<"\n";
afisare(w[nr]);
return 0;
}