Cod sursa(job #2300641)

Utilizator driver71528@gmail.comTerec Andrei-Sorin [email protected] Data 11 decembrie 2018 20:47:01
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <set>
#define INT_MAX 2000000001
using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
struct Best
{
    int val,urm,best,poz;
};
struct comp
{
    bool operator()(Best a,Best b)
    {
        return a.best>b.best;
    }
};
multiset<Best,comp> s;
Best x[100001];

int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>x[i].val;
        x[i].best=1;
        x[i].urm=0;
        x[i].poz=i;
    }
    x[0].best=x[0].urm=0;
    x[0].poz=0;
    x[0].val=INT_MAX;
    s.insert(x[n]);
    s.insert(x[0]);
    int best=0;
    for(int i=n-1;i>=1;i--)
    {
        multiset<Best,comp>::iterator j;
        for(j=s.begin();j->val<=x[i].val;j++);
        x[i].urm=j->poz;
        x[i].best=1+j->best;
        s.insert(x[i]);
    }
    int p=s.begin()->poz;
    g<<x[p].best<<'\n';
    while(x[p].best)
    {
        g<<x[p].val<<' ';
        p=x[p].urm;
    }
    return 0;
}