Pagini recente » Cod sursa (job #3145169) | Cod sursa (job #2409865) | Cod sursa (job #2583573) | Cod sursa (job #1185361) | Cod sursa (job #481804)
Cod sursa(job #481804)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int v[1<<17],x[1<<17],pred[1<<17],m=1,n;
int caut(int a)
{
int i,pas = 1<<16;
for(i=0 ; pas ; pas>>=1)
if(i+pas<=m && v[x[i+pas]]<a)
i+=pas;
return i+1;
}
void citire(){
int i;
in>>n;
for(i=1;i<=n;i++){
in>>v[i];
}
}
void scriere(int b){
if(pred[b]!=0){
scriere(pred[b]);
}
out<<v[b]<<" ";
}
void prelucrare(){
int aux,i;
x[1]=1;
for(i=2;i<=n;i++){
aux=caut(v[i]);
if(aux>m)
x[++m]=i;
else
x[aux]=i;
pred[i] = x[aux-1];
}
out<<m<<"\n";
scriere(x[m]);
}
int main(){
citire();
prelucrare();
return 0;
}