Cod sursa(job #1049606)

Utilizator ShaDoWsiD100Rzv Rzv ShaDoWsiD100 Data 7 decembrie 2013 16:08:08
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[100001],q[100001],P[100001],qq,pp,i,poz,m,sol[100001];
int cbin(int x){
    int p,u;
    p=1;u=qq;
    m=(p+u)/2;
    while(p<=u){
        if(q[m]<x){
            p=m+1;
            m=(p+u)/2;}
        else
        if(q[m]>x && q[m-1]<x)
            return m;
        else
        if(q[m]==x)
            return 0;
        else{
            u=m-1;
            m=(p+u)/2;}
    }
    if(q[m]<q[qq])
        return m;
    else
        return m+1;
}
int main(){
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i];
    q[1]=v[1];
    P[1]=1;
    qq=pp=1;
    for(i=2;i<=n;i++)
    {
        poz=cbin(v[i]);
        if(poz!=m+1)
            q[poz]=v[i];
        else
            q[++qq]=v[i];
        P[++pp]=poz;
    }
    g<<qq<<'\n';
    //int val=qq;
    for(i=1;i<=n;i++)
        if(sol[P[i]]==0)
            sol[P[i]]=v[P[i]];
    //for(i=n;i>=1 && val>0;i--)
     //   if(P[i]==val)
     //       sol[val--]=v[i];
    for(i=1;i<=qq;i++)
        g<<sol[i]<<" ";
    return 0;

}