Pagini recente » Cod sursa (job #2886455) | Cod sursa (job #424120) | Borderou de evaluare (job #2128889) | Cod sursa (job #2370680) | Cod sursa (job #1990086)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N = 100010;
int n,x[N],p[N],v[N],b[N],lo,mi,hi,i,L;
void afisare(int);
int main()
{
f>>n;
for(i=1; i<=n; i++)
{
f>>x[i];
lo=0;
hi=L+1;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(v[mi]<x[i])
lo=mi;
else
hi=mi;
}
if(hi==L+1)
L++;
v[hi]=x[i];
p[hi]=i;
b[i]=p[lo];
}
afisare(p[L]);
return 0;
}
void afisare(int k)
{
if(k==0)
{
g<<L<<'\n';
return;
}
afisare(b[k]);
g<<x[k]<<' ';
}