Cod sursa(job #1435604)

Utilizator rangerChihai Mihai ranger Data 13 mai 2015 20:44:33
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");

const int N=100003;
int n,i,l,r,mij,sol,k;
vector<int> a(N), v(N), p(N),s;

int main()
{
    cin>>n;
    for (i=1;i<=n;i++)cin>>a[i];
    v[0]=0;a[0]=-(int)1e9;
    k=1; v[k]=1;
    for (i=2;i<=n;i++)
        if (a[i]>a[v[k]]) v[++k]=i,p[i]=v[k-1];
    else {
        l=0;r=k-1;
        while (l<=r){
            mij=(l+r)/2;
            if (a[v[mij]]<a[i])sol=mij,l=mij+1;
            else r=mij-1;
        }
      //  cout<<sol<<'\n';
        p[i]=p[v[++sol]];
        v[sol]=i;
    }
    cout<<k<<'\n';
    for (int t=v[k];t;t=p[t])s.push_back(t);
    reverse(s.begin(),s.end());
    for (i=0;i<s.size();i++)cout<<a[s[i]]<<' ';
    return 0;
}