Pagini recente » Diferente pentru problema/calcul intre reviziile 8 si 7 | Monitorul de evaluare | Cod sursa (job #3313920) | Cod sursa (job #3341999) | Cod sursa (job #3358536)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int a[100005];
int d[100005];
int pos[100005];
int pr[100005];
int main()
{
ios::sync_with_stdio(false);
in.tie(nullptr);
int n;
in>>n;
for(int i=1;i<=n;i++)
{
in>>a[i];
}
int l=0;
for(int i=1;i<=n;i++)
{
int p=lower_bound(d+1,d+l+1,a[i])-d;
d[p]=a[i];
pos[p]=i;
pr[i]=0;
if(p>1)
{
pr[i]=pos[p-1];
}
else
{
pr[i]=0;
}
if(p>l)
{
l=p;
}
}
out<<l<<"\n";
vector <int> nr;
int pe=pos[l];
while(pe)
{
nr.push_back(a[pe]);
pe=pr[pe];
}
reverse(nr.begin(),nr.end());
for(int i:nr)
{
out<<i<<" ";
}
return 0;
}