Cod sursa(job #2975125)

Utilizator LucaTTiron Luca LucaT Data 5 februarie 2023 15:09:39
Problema Subsir crescator maximal Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int INF= 2e9;
int n,L,x;
vector<int> a;
 int tr[100005],ind[100005];
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
    fin>>x;
    a.push_back(x);
}
vector<int> d(n+2,INF);
d[0]=-INF;

for(int i=0;i<n;i++)
{    int j=upper_bound(d.begin(),d.end(),a[i])-d.begin();

    if(d[j-1]<a[i])
    {
        if(a[i]<d[j])
        {
            d[j]=a[i];
            ind[j]=i;
            tr[i]=ind[j-1];
        }
    }
}
for(int i=0;i<=n;i++)
{
    if(d[i]<INF)
        L=i;
}
fout<<L<<endl;
vector<int>ans;
int pos=ind[L];
	while(pos > 0) {
		ans.push_back(pos);
		pos = tr[pos];
	}
	reverse(ans.begin(), ans.end());
	for(int i = 0; i < (int) ans.size(); i++) {
		fout << a[ans[i]] << " ";
	}

    return 0;
}