Cod sursa(job #1238156)

Utilizator PTAdrian64Pop-Tifrea Adrian PTAdrian64 Data 5 octombrie 2014 20:07:15
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <cstdio>
#define max_n 100020
#define maxval 2000000020
#include <stack>

using namespace std;

int n,a[max_n],p[max_n],m[max_n];
stack <int> q;

int main(void){
  freopen("scmax.in","r",stdin);
  freopen("scmax.out","w",stdout);
  scanf("%d",&n);
  int i=0,l=0;
  for(i = 0;i<n;i++){
     scanf("%d", &a[i]);
     int fl=1,ll=l,md;
     while(fl<=ll){
        md=fl+(ll-fl)/2;

        if(a[m[md]]<a[i])
            fl=md+1;
        else

            ll=md-1;
     }
     int nl=fl;

     p[i]=m[fl-1];

     if(nl>l)l=nl;
     m[nl]=i;
  }
  printf("%d\n",l);
  int k=m[l];
  for(i=l-1;i>=0;--i){
    q.push(a[k]);
    k=p[k];
  }
  while(!q.empty()){
     printf("%d ",q.top());
     q.pop();
  }
}