Cod sursa(job #1144882)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 17 martie 2014 18:33:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
#define maxn 100005
using namespace std;
ifstream fi("scmax.in");
ofstream fo("scmax.out");

int i,n,a[maxn],lung[maxn],l[maxn];
int s[maxn],poz,nr=1;

int caut(int x){
    int p,u,m;
    p=0; u=nr; m=(p+u)/2;
    
    while(p<=u)
       if(a[l[m]]<x && a[l[m+1]]>=x) return m;
       else if(a[l[m+1]]<x){ p=m+1; m=(p+u)/2; }
       else { u=m-1; m=(p+u)/2; } 
                
    return nr;
}

int main(){
    fi>>n;
    for(i=1;i<=n;i++) fi>>a[i];
    
    lung[1]=1; l[0]=0; l[1]=1;
    for(i=2;i<=n;i++){
                      poz=caut(a[i]);
                      lung[i]=poz+1;
                      l[poz+1]=i;
                      if(nr<poz+1) nr=poz+1;
                     }

    fo<<nr<<"\n"; 
    poz=nr; s[nr+1]=2000000009;
    for(i=n;i>0;i--)
      if(lung[i]==nr && a[i]<s[nr+1]) s[nr--]=a[i];
      
    nr=poz;
    for(i=1;i<=nr;i++) fo<<s[i]<<" "; 
    
    fi.close();
    fo.close();
    return 0;
}