Cod sursa(job #2296479)

Utilizator AlexutAlex Calinescu Alexut Data 4 decembrie 2018 18:39:00
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
using namespace std;
vector <int>q;
int v[100005],p[100005];
vector<int>sol;
int main()
{
    ifstream cin ("scmax.in");
    ofstream cout ("scmax.out");
    int n;
    cin>>n;
    int pooz=1;
    int i;
    for(i=0;i<n;i++)
        cin>>v[i];
    for(i=0;i<n;i++)
    {
        if(q.empty())
        {
            q.push_back(v[i]);
            p[0]=0;
            continue;
        }
        vector<int>::iterator it,it1;
        int poz,poz1;
        int val = v[i];
        it = lower_bound(q.begin(),q.end(),val);
        if(it==q.end())
        {
            q.push_back(v[i]);
            p[i]=q.size()-1;
            continue;
        }
        poz = it - q.begin();
        *it=v[i];
        p[i]=poz;
    }

    int ct = q.size()-1;
    int pos;
    for(i=n-1;i>=0;i--)
    {
        if(p[i]==ct)
        {
            pos=i;
            break;
        }
    }

    for(i=pos;i>=0;i--)
    {
        if(p[i]==ct)
        {
            ct--;
            sol.push_back(v[i]);
        }
    }
    reverse(sol.begin(),sol.end());
    cout<<sol.size()<<endl;
    for(i=0;i<sol.size();i++)
        cout<<sol[i]<<" ";




    return 0;
}