Pagini recente » Cod sursa (job #883186) | Cod sursa (job #2599396) | Cod sursa (job #1559694) | Cod sursa (job #395166) | Cod sursa (job #2530038)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX=100005;
const int INF=2000000000;
int aux[NMAX],prec[NMAX],a[NMAX];
int N,last;
int BS(int st , int dr , int val)
{
if(st>dr) return 0;
int mid=(st+dr)/2;
if(val>a[aux[mid]]) return max(mid,BS(mid+1,dr,val));
else return BS(st,mid-1,val);
}
void print(int poz)
{
if(prec[poz]!=0) print(prec[poz]);
fout<<a[poz]<<" ";
}
void read()
{
fin>>N;
for(int i=1;i<=N;++i)
{
fin>>a[i];
}
last=0;
aux[0]=0;
a[0]=-INF;
a[N+1]=INF;
for(int i=1;i<=N;++i)
if(a[i] > a[aux[last]])
{
aux[++last]=i;
prec[i]=aux[last-1];
}
else
{
int poz=BS(1,last,a[i]);
prec[i]=aux[poz];
aux[poz+1]=i;
}
fout<<last<<"\n";
print(aux[last]);
}
int main()
{
read();
return 0;
}