Pagini recente » Cod sursa (job #1406448) | Cod sursa (job #2402295) | Cod sursa (job #2285524) | Cod sursa (job #2850359) | Cod sursa (job #651914)
Cod sursa(job #651914)
#include <fstream>
#define vL 100001
#define qL 100001
#define dL 100001
#define solL 100001
using namespace std;
ifstream in;
ofstream out;
int v[vL],d[dL],q[qL],sol[solL];
inline int BS(int x,int L,int R)
{
if(L<R)
{
int M=(L+R)>>1;
if(v[q[M]]<x) return BS(x,M+1,R);
else return BS(x,L,M);
}
else return L;
}
int main()
{
int N,pos;
in.open("scmax.in");
in>>N;
for(int i=1;i<=N;++i) in>>v[i];
in.close();
for(int i=1;i<=N;++i)
if(v[q[q[0]]]<v[i])
{
q[++q[0]]=i;
d[i]=q[0];
}
else
{
pos=BS(v[i],1,q[0]);
q[pos]=i;
d[i]=d[pos];
}
out.open("scmax.out");
out<<q[0]<<'\n';
for(int i=N;i>0;--i)
if(d[i]==q[0]&&(sol[sol[0]]>v[i]||sol[0]==0))
{
sol[++sol[0]]=v[i];
if(--q[0]==0) break;
}
for(int i=sol[0];i>1;--i) out<<sol[i]<<' ';
out<<sol[1]<<'\n';
out.close();
return 0;
}