Pagini recente » Cod sursa (job #2929348) | Cod sursa (job #362339) | Cod sursa (job #3122009) | Cod sursa (job #10838) | Cod sursa (job #2174882)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,k,a[100005],st[100005];
int poz[100005],pozitie;
void cautabin(int left,int right,int x)
{
int mid;
while(left<=right)
{
mid=(left+right)/2;
if(st[mid]>=x)
{
pozitie=mid;
right=mid-1;
}else
left=mid+1;
}
}
int main()
{
f>>n;
for(int i=1;i<=n;++i)
f>>a[i];
k=0;
st[k]=0;
for(int i=1;i<=n;++i)
{
if(a[i]>st[k])
{
k++;
poz[i]=k;
st[k]=a[i];
}else{
pozitie = k;
cautabin(1,k,a[i]);
st[pozitie]=a[i];
poz[i]=pozitie;
}
}
g<<k<<'\n';
vector <int> V;
for(int i=n;i>=1&&k;--i)
if(poz[i]==k)
{
V.push_back(a[i]);
k--;
}
for(int i=V.size()-1;i>=0;--i)
g<<V[i]<<" ";
return 0;
}