Cod sursa(job #2648097)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 8 septembrie 2020 16:55:42
Problema Subsir crescator maximal Scor 55
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

int v[100001],dp[100001],pos[100001],ans[100001];

int binary_search(int st,int dr,int x)
{
	int ans=0;
	while(st<=dr)
	{
		int mid=(st+dr)/2;
		if(v[pos[mid]]<x)
		{
			ans=mid;
			st=mid+1;
		}
		else
			dr=mid-1;
	}
	return ans;
}


int main()
{
	int n,ans1=0,l=0,k;
	in>>n;
	for(int i=1;i<=n;i++)
		in>>v[i];
	for(int i=1;i<=n;i++)
	{
		int x=binary_search(1,l,v[i]);
		l=max(l,x+1);
		dp[i]=x+1;
		pos[dp[i]]=i;
		ans1=max(ans1,dp[i]);
	}
	k=ans1;
	for(int i=1;i<=n;i++)
	{
		if(dp[i]==k)
		{
			ans[k]=v[i];
			k--;
		}
	}
	out<<ans1<<"\n";
	for(int i=1;i<=ans1;i++)
		out<<ans[i]<<" ";
	return 0;
}