Cod sursa(job #1515933)

Utilizator LiviaMurariuLivia Murariu LiviaMurariu Data 2 noiembrie 2015 14:37:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#include <stdlib.h>
#define MAXN 100001
using namespace std;
ofstream g("scmax.out");
int l[MAXN], prev1[MAXN], v[MAXN];
void scrie(int poz){
  if(poz){
    scrie(prev1[poz]);
    g<<v[poz]<<" ";
  }
}
int main()
{
    int n, i, lmax, rasp, p;
    ifstream f("scmax.in");
    f>>n;
    for(i=1; i<=n; i++)
      f>>v[i];
    l[1]=lmax=1;
    for(i=2; i<=n; i++){
      p=1<<17; rasp=0;
      while(p){
        if(rasp+p<=lmax && v[l[rasp+p]]<v[i])
          rasp+=p;
        p>>=1;
      }
      if(rasp==lmax)
        ++lmax;
      prev1[i]=l[rasp];
      l[rasp+1]=i;
    }
    g<<lmax<<'\n';
    scrie(l[lmax]);
    g<<"\n";
    g.close();
    return 0;
}