Cod sursa(job #887244)

Utilizator mihai27Mihai Popescu mihai27 Data 23 februarie 2013 17:22:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream>
#include<algorithm>
#include<vector>

using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

int poz,i,nr,n,x;
vector<pair<int,int> > b(100005);
vector<int> sol,a(10005);

int cautbin(int st,int dr,int x)
{
    int m=(st+dr)/2;

    if (st==dr && x<=a[st]) return st;
    if (st==dr && x>a[st])  return ++nr;

    if (a[m]<x) cautbin(m+1,dr,x);
        else if (a[m]>x) cautbin(st,m,x);
}

int main()
{
    in>>n>>a[++nr];
    b[1]=make_pair(1,a[1]);

    for (i=2;i<=n;i++)
    {
        in>>x;
        poz=cautbin(1,nr,x);
        a[poz]=x;
        b[i]=make_pair(poz,x);
    }
    out<<nr<<'\n';
    for (i=n;i>=1;i--)
        if (b[i].first==nr)
        {
            nr--;
            sol.push_back(b[i].second);
        }
    for (i=sol.size()-1;i>=0;i--)
        out<<sol[i]<<' ';

}