Cod sursa(job #887960)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 24 februarie 2013 10:13:07
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]<<' ';
 
}