Pagini recente » Cod sursa (job #1269213) | Cod sursa (job #2664279)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[100005],p[100005],V[100005],h;
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
for(int i=1;i<=n;i++)
{
if(v[i]>V[h])
V[++h]=v[i],p[i]=h;
else{
int st=1,dr=h,poz;
while(st<=dr)
{
int mi=(st+dr)>>1;
if(V[mi]>=v[i])
poz=mi,dr=mi-1;
else st=mi+1;
}
V[poz]=v[i],p[i]=poz;
}
}
g<<h<<'\n';
vector <int> Sol;
for(int i=n;i>=1;i--)
if(p[i]==h)
{
Sol.push_back(v[i]);
h--;
}
for(int i=Sol.size()-1;i>=0;i--)
g<<Sol[i]<<' ';
return 0;
}