Cod sursa(job #1210925)

Utilizator fromzerotoheroFROM ZERO fromzerotohero Data 21 iulie 2014 17:12:33
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
// S[i] - cea mai mica valoare care poate sa fie finalul unui
//        subsir crescator de i elemente

// 24 12 15 15 19

#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define INF 1<<30
#define nmax 100001

int n,i,dr,poz;
int a[nmax],s[nmax];

int caut_bin(int st, int dr, int val)
{
    while(st<dr)
    {
        int mid=(st+dr)/2;
        if(s[mid]<val && s[mid+1]>=val)
            return mid;
        if(s[mid]<val)
            st=mid+1;
        else
            dr=mid-1;
    }
    return st;
}

int main() {
    
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    for(i=1;i<=n;i++)
    {
        s[i]=INF;
    }
    
    s[0]=-INF;
    dr=0;
    for(i=1;i<=n;i++)
    {
        poz=caut_bin(0, dr, a[i]);
        s[poz+1]=a[i];
        dr=max(dr, poz+1);
        //cout<<poz<<" ";
    }
    fout<<dr<<"\n";
    
    return 0;
}