Pagini recente » Cod sursa (job #2446834) | Cod sursa (job #841572) | Cod sursa (job #1076120) | Cod sursa (job #1889206) | Cod sursa (job #2698885)
#include <bits/stdc++.h>
#define ll long long
//#define int ll
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int aib[100005];
int v[100005];
int ans[100005];
vector < int > normm;
map < int ,int > mp;
int query(int poz)
{ int r=0;
for(int i=poz;i>0;i-=(i&(-i)))
{
r=max(r,aib[i]);
}
return r;
}
void update(int poz,int x)
{
for(int i=poz;i<=n;i+=(i&(-i)))
{
aib[i]=max(aib[i],x);
}
return ;
}
main()
{
f>>n;
for(int i=1;i<=n;i++)
{
f>>v[i];
normm.push_back(v[i]);
}
sort(normm.begin(),normm.end());
for(int i=0;i<normm.size();i++)
mp[normm[i]]=i+1;
for(int i=1;i<=n;i++)
{
ans[i] = query(mp[v[i]]-1)+1;
update(mp[v[i]],ans[i]);
}
g<<*max_element(ans+1,ans+n+1)<<'\n';
int target = *max_element(ans+1,ans+n+1);
vector < int > raspuns;
for(int i=n;i;i--)
{
if(ans[i]==target)
{
raspuns.push_back(v[i]);
target--;
}
}
reverse(raspuns.begin(),raspuns.end());
for(auto x:raspuns) g<<x<< ' ';
return 0;
}