Cod sursa(job #2781600)

Utilizator etienAndrone Stefan etien Data 9 octombrie 2021 22:15:48
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define pip pair<int,pair<int,int>>
set<pip>s;
int pre[100001],v[100001];
int main()
{
    int n,i,x;
    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>v[i];
        if(!s.size())
        {
            s.insert({-v[i],{1,1}});
        }
        else
        {
            pip p=*s.begin();
            if(p.first>=v[i])
            {
                s.insert({-v[i],{1,i}});
            }
            else
            {
                auto p=*s.lower_bound({-v[i]+1,{-1,-1}});
                pip p2;
                p2.first=-v[i];
                p2.second.first=p.second.first+1;
                p2.second.second=i;
                pre[i]=p.second.second;
                s.insert(p2);
            }
        }
    }
    int maxi=0,poz;
    for(auto q:s)
    {
        //cout<<-q.first<<" "<<q.second.first<<" "<<q.second.second<<endl;
        if(maxi<q.second.first)
        {
            maxi=q.second.first;
            poz=q.second.second;
        }
    }
    fout<<maxi<<"\n";
    stack<int>st;
    while(poz!=0)
    {
        st.push(poz);
        poz=pre[poz];
    }
    while(!st.empty())
    {
        fout<<v[st.top()]<<" ";
        st.pop();
    }
}