Pagini recente » Cod sursa (job #1628149) | Cod sursa (job #138565) | Cod sursa (job #2585775) | Cod sursa (job #3241069) | Cod sursa (job #1203917)
#include<fstream>
using namespace std;
#define INF 30000
typedef long long Vector[100000];
ifstream cin("scmax.in");
ofstream cout("scmax.out");
Vector v,p,q,s;
long long N,Len; /*Len-lungimea vectorului Q*/
void ReadData() {
int i;
cin>>N;
for(i=1;i<=N;i++)
cin>>v[i];
}
int Insert(int K,int Lo,int Hi)
{ int Mid=(Lo+Hi)/2;
if(Lo==Hi)
{ if (Hi>Len) q[++Len+1]=INF;
q[Lo]=K;
return Lo;
}
else if(K<q[Mid]) return Insert(K,Lo,Mid);
else return Insert(K,Mid+1,Hi);
}
void BuildPQ()
{ int i;
Len=0;q[1]=INF;
for(i=1;i<=N;i++)
p[i]=Insert(v[i],1,Len+1);
}
void BuildS()
{ int i,k=N;
for(i=Len;i;i--)
{ while(p[k]!=i) k--;
s[i]=v[k];
}
}
void WriteSolution()
{ int i;
cout<<Len<<"\n";
for(i=1;i<=Len;i++)
cout<<s[i]<<" ";
}
int main() {
ReadData();
BuildPQ();
BuildS();
WriteSolution();
return 0;
}