Cod sursa(job #917475)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 17 martie 2013 22:25:18
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>

using namespace std;

int main()
{
    cout<<"alegeti elevul curent 1"<<endl;
    int v[105],q[105],p[105],sol[105];
    int n,i;
    
    n=5;
    
    for(i=0;i<n;i++)
    {
         cin>>v[i];           
    }
    
    cout<<"continuam"<<endl;
    
    int lung=1,cap,coada,mijl,raspuns;
    
    q[0]=v[0];
    p[0]=0;
    
    for(i=1;i<n;i++)
    {
        cap=0;
        coada=lung-1;
        mijl=(lung-1)/2;
        raspuns=lung;
        
        while(cap<=coada)
        {
            if(q[mijl]>=v[i])
            {
               if(mijl<raspuns)
                  raspuns=mijl;
                  
               coada=mijl-1;               
            }
            else
            {
               cap=mijl+1; 
            }
            
            mijl=(cap+coada)/2;                 
        }
        
        q[raspuns]=v[i];
        p[i]=raspuns;
        
        if(raspuns==lung)
        {
           lung++;    
        }
                    
    }
    
    cout<<lung<<'\n';
    
    int copie=lung;
    
    int poz=lung-1;
    
    lung--;
    
    for(i=lung;lung>=0 && i>=0;i--)
       if(p[i]==lung)
       {
          sol[poz--]=v[i];
          lung--;
       }
    
    for(i=0;i<copie;i++)
    {
       cout<<sol[i]<<' ';                    
    }
    
    system("PAUSE");
    return 0;
}