Pagini recente » Cod sursa (job #2658210) | Cod sursa (job #2653268) | Cod sursa (job #2805388) | Cod sursa (job #846314) | Cod sursa (job #2989782)
#include <bits/stdc++.h>
#define FOR(WHATEVER) for(int i = 1; i <= WHATEVER; ++ i)
using namespace std;
const string problem = "scmax";
ifstream fin(problem + ".in");
ofstream fout(problem + ".out");
const int NMAX = 1e5+5;
int n;
int arr[NMAX], dp[NMAX], p[NMAX], idx[NMAX];
/// READING THE INPUT
int main()
{
fin >> n;
for(int i=1;i<=n;++i)
fin >> arr[i];
int k=1;
dp[k] = arr[k];
for(int i=1;i<=n;++i)
{
if(arr[i]>dp[k])
{
dp[++k]=arr[i];
p[i]=k;
}
else
{
int st=1, dr=k, poz=k+1;
while(st<=dr)
{
int mid=(st+dr)/2;
if(arr[i]<=dp[mid])
poz=mid, dr=mid-1;
else
st=mid+1;
}
dp[poz]=arr[i];
p[i]=poz;
}
}
int j=n;
for(int i=k;i>=1;--i)
{
while(p[j]!=i)
j--;
idx[i]=j;
}
fout<<k<<'\n';
for(int i=1;i<=k;++i)
fout<<arr[idx[i]]<<' ';
}