Pagini recente » Istoria paginii runda/training_day_3 | Diferente pentru preoni-2006/runda-4/solutii intre reviziile 27 si 20 | Istoria paginii jc2021/solutii/capcana | Istoria paginii runda/kisstibor80 | Cod sursa (job #2567029)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
vector <int> sol;
int n,poz,p,u,mij,i,k,valoare,v[100100],L[100100],t[100100];
int main()
{
f>>n;
for(i=1;i<=n;i++)f>>v[i];
k=1;t[k]=v[1];L[1]=1;
for(i=2;i<=n;i++)
{
if(t[k]<v[i])k++,t[k]=v[i],L[i]=k;
else
{
p=1;u=k;poz=-1;
while(p<=u)
{
mij=(p+u)/2;
if(t[mij]>=v[i])poz=mij,u=mij-1;
else p=mij+1;
}
if(poz!=-1){t[poz]=v[i];L[i]=poz;}
}
}
g<<k<<'\n';
valoare=INT_MAX;
for(i=n;i>=1;i--)
{
if(L[i]==k && v[i]<valoare)
{
sol.push_back(v[i]);
k--;
valoare=v[i];
}
}
while(!sol.empty())g<<sol.back()<<" ",sol.pop_back();
return 0;
}