Pagini recente » Cod sursa (job #1617195) | Cod sursa (job #770255) | Cod sursa (job #2084563) | Cod sursa (job #1182980) | Cod sursa (job #2284227)
#include <bits/stdc++.h>
#define N_MAX 100005
using namespace std;
int n,a[N_MAX],b[N_MAX],o,poz[N_MAX];
ifstream in("scmax.in");
ofstream out("scmax.out");
void read()
{
in >> n;
for(int i=1; i<=n; i++)
{
in >> a[i];
}
}
int cauta(int st, int dr, int val)
{
int m;
while(st<=dr)
{
m=st+(dr-st)/2;
if(val<a[b[m]])
st=m+1;
else
dr=m-1;
}
return st;
}
void solve()
{
int k;
a[0]=2000000001;
for(int i=n; i>=1; i--)
{
k=cauta(1,o,a[i]);
if(k>o)
{
poz[i]=b[k-1];
o=k;
b[k]=i;
}
else
{
poz[i]=b[k-1];
if(a[b[k]]<a[i])
{
b[k]=i;
}
}
}
}
void afis()
{
int i;
out << o << '\n';
for( i=b[o]; i>0; i=poz[i])
{
out << a[i] << ' ';
}
}
int main()
{
read();
solve();
afis();
return 0;
}