Pagini recente » Cod sursa (job #1802813) | Cod sursa (job #1063075) | Cod sursa (job #294112) | Cod sursa (job #2869478) | Cod sursa (job #752566)
Cod sursa(job #752566)
#include<fstream>
#define N 100005
using namespace std;
int v[N],x[N],pred[N],lung[N],n,m;
ifstream in("scmax.in");
ofstream out("scmax.out");
int caut (int a) {
int s=1,d=m,mij;
while (s!=d) {
mij=(s+d)/2;
if(a<=v[x[mij]])
d=mij;
else
s=mij+1;
}
if(v[x[s]]<a)
++s;
return s;
}
void citire (){
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
}
int maxim () {
int i,m=1;
for(i=1;i<=n;i++) {
if(lung[m]<lung[i])
m=i;
}
return m;
}
void subsir (int p) {
if(p==0) return;
subsir(pred[p]);
out<<v[p]<<" ";
}
void parcurg (){
int i,poz;
x[1]=1;
pred[1]=0;
lung[1]=1;
m=1;
for(i=2;i<=n;++i){
poz=caut(v[i]);
x[poz]=i;
lung[i]=poz;
pred[i]=x[poz-1];
if(poz==m+1)
m++;
}
out<<m<<"\n";
poz=maxim();
subsir(poz);
}
int main () {
citire ();
parcurg();
in.close();
out.close();
return 0;
}